0

私のアプリの1つでは、マニフェストに追加されたApplication(MyApplication)とBroadcastReceiver(MyBroadcastReceiver)のサブクラスを使用しています。BroadcastReceiverは、アクションandroid.intent.action.PACKAGE_ADDEDおよびandroid.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();
    }
}

MyBroadcastReceiver:

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前に、オブジェクトを作成する必要があります。BroadcastReceiveronReceive()

于 2012-12-20T14:51:06.760 に答える