2012-03-27 2 views
3

デバイス/アプリケーションC2DM登録トークンが変更されたときに、一部のデバイス永続化データをネットワークサーバーに移行できるコードを書いています。私のアプリは、通常のアプリケーションを拡張するカスタムアプリケーションクラスを使用:IntentServiceは、BroadcastReceiverから開始され、Applicationクラスのインスタンスを作成しますか?

これは、最終的broadcastreceiver(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); 
} 

(注によってキックオフされますクラス)。

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

IntentServiceの中から自分のアプリケーションクラスの静的メソッドを呼び出すことは安全です(または良い考えですか)? (これらの静的メソッドはApplication.onCreateに初期化され、戻りオブジェクトを持っている)

答えて

4

あなたIntentServiceが起動すると、アプリケーションがないがすでに実行されている場合、それは、あなたのアプリケーションクラスのインスタンスを作成します。アプリケーションが動作中の場合は、変更されたアプリケーション固有のオブジェクトにそのままアクセスできます。 しかし、アプリケーションが終了してbrがサービスを開始すると、アプリケーション全体の新しいインスタンスが作成されます。静的メソッドは、あなたがその時に望む値を与えることはありません。データをどこかに保存し、アプリケーションのライフサイクルに依存しないことが私の提案です。

関連する問題