这是一个场景:
AsyncTask#doInBackground
方法,但这很危险,因为我没有控制UI线程,所以根本不起作用我最终得到IllegalMonitorStateException
。在这种情况下,正确等待的“正确”方式是什么(甚至可能是状态更新)?
P.S。我将“等待”代码放入Runnable并在我到达AsyncTask之前执行它。它有效,例如Thread.sleep(2000)
我还不确定这是安全的方法。有没有人有FutureTask
的经验?
答案 0 :(得分:2)
如果用户在执行期间执行搜索 更新我想等到更新 显示“请稍候”时结束 进度警报。我不想查询 并显示搜索结果,直到 刷新完全完成。
这是你的电话,但要记住你正在创造自己的问题。就个人而言,我会抛弃这个要求。用户不应仅仅因为闹钟响起而感到不便。
例如,您可以禁用警报并在活动消失时重新启用警报。
或者,让更新以原子方式执行(例如,对表的副本进行更新,然后在事务中同步表),以便活动仍然可以安全地访问数据库正在进行更新。
什么是“正确”的方式 正确等待(甚至可能是状态 更新)在这种情况下?
让服务在更新完成后,通过某种回调或广播Intent告诉活动。保持进度指示器保持活动状态直到发生这仍然会引入一些时序挑战,这就是为什么我只是抛弃了这个要求。
答案 1 :(得分:0)
感谢Mark(一如既往)提供有用的见解。在这里,我将概述(在我看来)应该如何完成上述场景: