启动Activity主要是通过Intent(意图)来实现。主要分为显示的和隐式的两种。
1、隐式启动Activity
优点:只要知道被启动Activity的Action和Category即可,不用知道对应的类名或者是包名。
只要Activity有对应的action和Category都会被启动起来。然后提供给用户选择要启动哪一个。
需要被启动的Activity,需要在自己的定义对应的action 和 category。
<activity
android:name=""
android:label="@string/second_activity_name" >
<intent-filter>
<action android:name=".SECONDACTIVITY_START" />
<category android:name="" />
</intent-filter>
</activity>
启动Activity的地方,把对应的Action填入即可。
private void startSecondActivityByAction() {
(TAG, "startSecondActivityByAction()");
Intent intent = new Intent();
(".SECONDACTIVITY_START");
(Intent.CATEGORY_DEFAULT);
try {
startActivity(intent);
} catch (Exception e) {
(TAG, "start activity error!");
}
}
2、显式的启动
2.1 、通过类名类启动Activity, 一般是同一个APK里面使用
private void startSecondActivityByClass() {
(TAG, "startSecondActivityByClass()");
Intent intent = new Intent(, );
try {
startActivity(intent);
} catch (Exception e) {
(TAG, "start activity error!");
}
}
2.2、 通过包名加类名启动
不足:被启动的应用的包名或者类名发生变化后,就会无法启动。
private void startSecondActivityByPackageName() {
(TAG, "startSecondActivityByPackage()");
Intent intent = new Intent();
(getPackageName(), getPackageName() + ".SecondActivity");
try {
startActivity(intent);
} catch (Exception e) {
(TAG, "start activity error!");
}
}
2.3 、通过ComponentName启动
不足:被启动的应用的包名或者类名发生变化后,就会无法启动。
private void startSecondActivityByComponent() {
(TAG, "startSecondActivityByComponent()");
Intent intent = new Intent();
(new ComponentName(getPackageName(), getPackageName() + ".SecondActivity"));
try {
startActivity(intent);
} catch (Exception e) {
(TAG, "start activity error!");
}
}
如果是Apk里面使用的话,可以使用显示或者是隐式的。
如果是不同APK的话,建议使用隐式的方式。做到第耦合。
附件:参考demo是Source Code