3

アプリケーションクラスからいくつかのデータを取得して変更する必要がある BroadcastReceiver があります。このデータは、一部のアクティビティでも取得および変更されます。

私はこの投稿を読みました:

getApplication() と getApplicationContext() の比較

そして、それが言うように、getApplication は常に getApplicationContext と同じオブジェクトを返すとは限りません。私の場合、getApplicationContext を使用して BroadcastReceiver に整数を設定し、(getApplication を使用して) アクティビティでその値を確認すると、常に 0 (デフォルト値) になります。

両方の場所で getApplicationContext を使用しようとしましたが、返されるオブジェクトは同じではありません。getApplication を使用してアクティビティで取得するのと同じオブジェクトを BroadcastReceiver で取得する方法はありますか? 代わりに SharedPreferences を使用する必要がありますか?

次に例を示します。

ブロードキャストレシーバー:

MyApp app = (MyApp)context.getApplicationContext();
app.setNumPA(10);

アクティビティ:

MyApp app = (MyApp) getApplication();
Log.d("MyActivity", "Num PA: "+app.getNumPA());

私のアクティビティでは、ログに常に「Num PA: 0」と表示されます。

4

1 に答える 1

4

たとえば、永続的なストレージを確実に使用する必要がありますSharedPreferences

この背後にある理由 - アプリケーション インスタンスは、ほぼいつでも (アプリがバックグラウンドにある間) Android OS によって強制終了される可能性があります。したがって、変数に頼ることはできませんstatic。代わりに、状態を永続ストレージに保存する必要があります。

于 2012-10-01T13:50:31.880 に答える