3

デバイス/アプリのC2DM登録トークンが変更されたときに、デバイスの永続データをネットワークサーバーに移行できるコードを記述しています。

これは、最終的にはブロードキャストレシーバー(具体的には、Google C2DM登録トークンを受信した結果として呼び出されるレシーバー)によって開始されます。

@Override
public void onRegistered(Context context, String registrationId) throws IOException {
    Log.d(TAG, "registrationId: " + registrationId);
    Intent selectIntent = new Intent(this, AlertMigrationService.class);
    this.startService(selectIntent);
}

(注:私のアプリは、通常のApplicationクラスを拡張するカスタムアプリケーションクラスを使用しています。)

技術的には、アプリケーションがバックグラウンドにある(または実行されていない)ときにこのレシーバーを呼び出すことができると思います。インテントサービスを開始するとどうなりますか?アプリケーション全体をスプールして、Applicationクラスのインスタンスを作成しますか?

IntentService内からApplicationクラスの静的メソッドを呼び出すのは安全ですか(または良い考えです)?(これらの静的メソッドには、Application.onCreateで初期化された戻りオブジェクトがあります)

4

1 に答える 1

4

IntentServiceが起動すると、アプリケーションがまだ実行されていない場合は、Applicationクラスのインスタンス作成されます。アプリケーションが稼働している場合は、変更されたアプリケーション固有のオブジェクトにそのままアクセスできます。ただし、アプリケーションが強制終了されてからbrがサービスを開始すると、アプリケーション全体の新しいインスタンスが作成されます。静的メソッドは、その時点で必要な値を提供しません。データをどこかに永続化し、アプリケーションのライフサイクルに依存しないことをお勧めします。

于 2012-03-27T19:36:53.930 に答える