web-dev-qa-db-ja.com

アプリケーションのonCreate()メソッドはいつ呼び出されますか?

私のAndroidアプリケーションでは、DefaultApplicationクラスが_Android.app.Application_を拡張し、そのonCreate()で使用されるいくつかのサービスをバインドしますこのアプリの他のアクティビティによって。

また、C2DMメッセージをリッスンして受信するBroadcastReceiverがあります。このレシーバーは、アプリケーションが実行されていないときにメッセージを受信すると、今後のメッセージを示すダイアログを起動し、アプリケーションのアクティビティを開始します。

私の質問は、DefaultApplicationと対話せずにアクティビティを開始すると、そのアプリケーションのアクティビティが開始されたため、DefaultApplicationonCreate()が呼び出されますか?

ここに私の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>
_
51
Yasin YILDIRIM

初めてだけ。

アクティビティが開始され、アプリケーションがロードされていない場合、両方のonCreate()メソッドが呼び出されます。

ただし、その後のアクティビティの開始では、アプリケーションのonCreate()は呼び出されません。

42
Peter Knego

onCreatehere と呼ばれるとき、公式の答えを見つけることができます。

アプリケーションの起動時に、アクティビティ、サービス、またはレシーバーオブジェクト(コンテンツプロバイダーを除く)が作成される前に呼び出されます。この関数で費やされる時間は、プロセス内の最初のアクティビティ、サービス、またはレシーバーの開始のパフォーマンスに直接影響するため、実装は可能な限り迅速に(たとえば、状態の遅延初期化を使用)する必要があります。このメソッドをオーバーライドする場合は、必ずsuper.onCreate()を呼び出してください。

32

他のプロセスで実行するサービスが定義されている場合、たとえば_Android:process=_を指定すると、そのプロセスに対してアプリケーションのonCreate()が再度呼び出されます。

たとえば、 AndroidアプリケーションクラスメソッドonCreateが複数回呼び出される を参照してください。

13
Paul Verest