0

在我的一个应用程序中,我使用了应用程序 (MyApplication) 的子类和添加到清单中的广播接收器 (MyBroadcastReceiver)。BroadcastReceiver 注册动作android.intent.action.PACKAGE_ADDEDandroid.intent.action.PACKAGE_REPLACED

在设备上添加或替换 APK 时会触发这些意图。应用程序本身在安装过程中没有显示,所以我的问题是:应用程序子类会与应用程序进程一起启动吗?

这是代码:

显现:

<application
    ...
    android:name=".MyApplication" >

    ...

    <receiver
        android:name=".MyBroadcastReceiver" >
        <intent-filter>
            <action
                android:name="android.intent.action.PACKAGE_ADDED" />
            <action
                android:name="android.intent.action.PACKAGE_REPLACED" />
            <data
                android:path="xxx.yyy.zzz"
                android:scheme="package" />
        </intent-filter>
    </receiver>
</application>

我的应用程序:

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        Log.d(this.getClass().getName(), "onCreate");

        // ...
        }

    @Override
    public void onTerminate() {
        // ...

        super.onTerminate();
    }
}

我的广播接收器:

public class MyBroadcastReceiver extends BroadcastReceiver {

    public static final String TAG = "xxx.yyy.zzz.MyBroadcastReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent != null && intent.getDataString() != null) {
            if (intent.getDataString().contains("xxx.yyy.zzz")) {
                if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {
                    Log.d(this.getClass().getName(), "onReceive(Package added)");

                    // ...
                } else if (intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) {
                    Log.d(this.getClass().getName(), "onReceive(Package replaced)");

                    // ...
                }
            }
        }
    }
}
4

1 回答 1

0

Application 子类会与应用程序进程一起启动吗?

是的。该Application对象应该在您的BroadcastReceiver实例被创建和调用之前被创建onReceive()

于 2012-12-20T14:51:06.760 回答