显示和隐式启动Activity的方式

时间:2025-01-25 14:41:03

 

 启动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