这是场景:
- 我有 2 项活动和一项服务
- 第一个活动是登陆视图/搜索页面。第二个活动显示搜索结果
- 始终针对内部 SQLite db 执行搜索
- 定期(比如每天)需要从远程源更新数据库,这是一个漫长的过程
- 如果用户在更新期间执行搜索,我想等到更新结束,同时显示“请稍候”进度警报。在刷新完全完成之前,我不想查询和显示搜索结果。
- 数据库更新由 AlarmManager 触发并由服务执行,该服务在更新过程中将“UPDATING”状态放入数据库
- 我可以轻松查询状态,但如何等待并定期重新查询数据库?我正在使用 AsyncTask 来处理搜索结果,我的下意识反应是将带有 wait() 的循环放入
AsyncTask#doInBackground
方法中,但这很危险并且根本不起作用,因为我没有控制 UI 线程,所以我最终得到IllegalMonitorStateException
.
在这种情况下,正确等待(甚至可能是状态更新)的“正确”方式是什么?
PS我将“等待”代码放入一个Runnable并在我到达我的AsyncTask之前执行它。它可以工作,例如Thread.sleep(2000)
我仍然不确定这是安全的方法。有没有人有任何经验FutureTask
?