私のAndroidアプリケーションでは、DefaultApplication
クラスが_Android.app.Application
_を拡張し、そのonCreate()
で使用されるいくつかのサービスをバインドしますこのアプリの他のアクティビティによって。
また、C2DMメッセージをリッスンして受信するBroadcastReceiver
があります。このレシーバーは、アプリケーションが実行されていないときにメッセージを受信すると、今後のメッセージを示すダイアログを起動し、アプリケーションのアクティビティを開始します。
私の質問は、DefaultApplication
と対話せずにアクティビティを開始すると、そのアプリケーションのアクティビティが開始されたため、DefaultApplication
のonCreate()
が呼び出されますか?
ここに私のDefaultApplication
の定義とマニフェストがあります:
_public class DefaultApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
doBindService();
}
void doBindService() {
// Establish a connection with the service. We use an explicit
// class name because we want a specific service implementation that
// we know will be running in our own process (and thus won't be
// supporting component replacement by other applications).
bindService(new Intent(DefaultApplication.this, SocketService.class),
socketServiceConnection, Context.BIND_AUTO_CREATE);
mIsBound = true;
}
void doUnbindService() {
if (mIsBound) {
// Detach our existing connection.
unbindService(socketServiceConnection);
mIsBound = false;
}
}
}
_
マニフェストは次のようになります。
_<application Android:icon="@drawable/icon" Android:label="@string/app_name"
Android:name="com.mypackage.DefaultApplication"
Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen"
Android:debuggable="true">
<service Android:name="com.mypackage.services.SocketService"></service>
<activity Android:name="TestActivity"
Android:screenOrientation="landscape"></activity>
</application>
_
初めてだけ。
アクティビティが開始され、アプリケーションがロードされていない場合、両方のonCreate()
メソッドが呼び出されます。
ただし、その後のアクティビティの開始では、アプリケーションのonCreate()
は呼び出されません。
onCreate
が here と呼ばれるとき、公式の答えを見つけることができます。
アプリケーションの起動時に、アクティビティ、サービス、またはレシーバーオブジェクト(コンテンツプロバイダーを除く)が作成される前に呼び出されます。この関数で費やされる時間は、プロセス内の最初のアクティビティ、サービス、またはレシーバーの開始のパフォーマンスに直接影響するため、実装は可能な限り迅速に(たとえば、状態の遅延初期化を使用)する必要があります。このメソッドをオーバーライドする場合は、必ずsuper.onCreate()を呼び出してください。
他のプロセスで実行するサービスが定義されている場合、たとえば_Android:process=
_を指定すると、そのプロセスに対してアプリケーションのonCreate()
が再度呼び出されます。
たとえば、 AndroidアプリケーションクラスメソッドonCreateが複数回呼び出される を参照してください。