私の質問は、「いつ手紙を読むことができるようになるか」ではなく、「私のポストが郵便配達員にいつ気付かれるか」についてです。
Activity
ユーザーがリストを編集できるようにします。ユーザーが編集をコミットするとすぐにIntentService
が開始され、データベース ヘルパーが呼び出され、必要に応じてデータベース エントリが変更されます。
データベースが正常に更新されるとすぐに (それまでは何もクラッシュしませんでした)、データベース ヘルパーは "ok" を に書き込みSharedPreferences
、IntentService
. はIntentService
にメッセージを送信します。BroadcastReceiver
これにより、現在のデータでリストが db から再ロードされます。
はのBroadcastReceiver
内部クラスであり、Activity
に動的に登録されますonCreate()
。
mReceiver = new MyMessageReceiver();
IntentFilter iFilter = new IntentFilter();
iFilter.addAction("com.example.mycoolapp.LOCALINTENT");
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, iFilter);
リストがリロードされるまでユーザーが my にとどまっていたActivity
としても、まったく問題はありません。しかし、ユーザーが動き回り、どういうわけか方向の変化を引き起こしていると想像してください...それが私が「OK」を持っている理由ですSharedPeferences
:
ではonCreate()
、受信者を登録した後、保留中のアクションがあるかどうかを確認します。
データベースが正常に更新された場合は、データをロードして、受信者が次のメッセージを無視するようにフラグを設定するだけです。IntentService がsetIntentRedelivery(true)
.
データベースがまだ更新されていないことがわかった場合は、 からのブロードキャストを待つことにしIntentService
ます。
私が非常に不確かなことの1つは、次のことです。
システムが受信機を「稼働中」と見なすのはいつからですか? 私はそれが終わったonReceive()
後にしか呼び出せないことを知っています。onCreate()
実行中onCreate()
に IntentService がローカル ブロードキャストを起動し (「早すぎる」)、レシーバーがそれを取得できない可能性はありますか?
その後、そのリストは、ユーザーがActivity
(かなり可能性が高い) を離れ、もう一度戻るまで (そうではない可能性が高い) 更新されることはありません。