58

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

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

私の質問は、との対話なしでアクティビティを開始すると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>
4

3 に答える 3

47

初めてだけ。

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

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

于 2011-10-07T11:26:15.360 に答える
35

ここonCreateで呼び出されたときに公式の回答を見つけることができます。

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

于 2011-10-07T11:20:35.180 に答える
16

サービスが他のプロセスで実行されるように定義されている場合、たとえば、そのプロセスに対してandroid:process=アプリケーションonCreate()が再度呼び出されることに注意してください。

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

于 2015-02-13T11:01:42.450 に答える