私のアプリの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)");
// ...
}
}
}
}
}