我的问题是:“我的邮箱什么时候会被邮递员注意到”,而不是“我什么时候可以阅读任何信件”?
我有一个Activity
允许用户编辑列表。一旦用户提交编辑,IntentService
就会启动 an ,然后调用数据库助手以根据需要更改数据库条目。
一旦数据库成功更新(在那之前没有崩溃),数据库助手将“ok”写入SharedPreferences
并返回到IntentService
. 向IntentService
a 发送一条消息BroadcastReceiver
,现在导致列表从 db 重新加载当前数据。
是的BroadcastReceiver
内部类,Activity
它在以下位置动态注册onCreate()
:
mReceiver = new MyMessageReceiver();
IntentFilter iFilter = new IntentFilter();
iFilter.addAction("com.example.mycoolapp.LOCALINTENT");
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, iFilter);
如果用户留在我Activity
的列表中,直到可以重新加载列表,那根本没有问题。但是想象一下用户四处移动并以某种方式导致方向改变......这就是为什么我有“ok”的原因SharedPeferences
:
在onCreate()
,注册接收者后,我检查是否有待处理的操作:
如果数据库更新成功,我可以加载数据并为我的接收者设置一个标志以忽略下一条消息。它将来,因为 IntentService 配置了setIntentRedelivery(true)
.
如果我发现数据库还没有更新,我决定等待来自IntentService
.
我非常不确定的一件事是:
从哪一刻起,系统会认为我的接收器“启动并运行”?我知道onReceive()
只能在onCreate()
完成后调用。
是否有可能onCreate()
在执行时, IntentService 触发本地广播(“太快”)而我的接收器永远不会得到它?
然后该列表将永远不会刷新,直到用户离开Activity
(这很可能)并再次返回(然后不太可能)。