请考虑以下事件顺序:
BroadcastReceiver
的{{1}}方法中注册了onResume
(没有处理程序)。Activity
方法来启动CursorLoader
,作为restartLoader
中的下一个即时语句(在 main 线程上调用onResume
本身)我的观察结果是,restartLoader
方法总是在第一次调用onLoadFinished
之前被调用。也就是说,onReceive
优先于CursorLoader
。此外,BroadcastReciever
的{{1}}方法在onReceive
方法完成之前不会被调用。
假设:
BroadcastReceiver
发布消息 AND onLoadFinished
是在BroadcastReciever
启动之前注册的,考虑到BroadcastReciever
已经有可用消息,不应立即触发CursorLoader
方法。 由于并非如此,因此我相信在活动的主线程上启动时,onReceive
优先于BroadcastReceiver
。但是,我似乎找不到任何文档。
如何确保我的CursorLoader
优先于BroadcastReceiver
?此行为很重要,因为我希望我的BroadcastReceiver
被前台服务广播的一些信息初始化,即使该应用程序是新启动的(即在CursorLoader
上调用onCreate)。 Activity
需要此信息来创建ACtivity
,以用于获取相关数据并将其显示在UI上。由于CursorLoader
在Uri
之前运行,因此它会构造一个没有此信息的CursorLoader
,然后从数据库中获取陈旧数据。
答案 0 :(得分:0)
不推荐使用加载器,强烈建议重构以使用ViewModel。您还可以结合使用实时数据。
链接到ViewModel ViewModel Overview 链接到实时数据LiveData Overview