gpt4 book ai didi

Android:如何正确等待服务进程完成

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:10 25 4
gpt4 key购买 nike

这是场景:

  1. 我有 2 项 Activity 和一项服务
  2. 第一个 Activity 是着陆 View /搜索页面。第二个 Activity 显示搜索结果
  3. 始终针对内部 SQLite 数据库执行搜索
  4. 需要定期(比如每天)从远程源更新数据库,这是一个漫长的过程
  5. 如果用户在更新期间执行搜索,我想等到更新结束,同时显示“请稍候”进度提醒。在刷新完全完成之前,我不想查询和显示搜索结果。
  6. 数据库更新由 AlarmManager 触发并由在更新过程中将“更新”状态放入数据库的服务执行
  7. 我可以轻松查询状态,但我如何等待并定期重新查询数据库?我正在使用 AsyncTask 来处理搜索结果,我的下意识 react 是将带有 wait() 的循环放入 AsyncTask#doInBackground 方法中,但这很危险而且根本不起作用,因为我不是控制 UI 线程,所以我以 IllegalMonitorStateException 结束。

在这种情况下,正确等待(甚至可能有状态更新)的“正确”方法是什么?

附言我将“等待”代码放入一个 Runnable 并在我到达我的 AsyncTask 之前执行它。它有效,例如Thread.sleep(2000) 我仍然不确定这是安全的方法。有没有人使用过 FutureTask

最佳答案

If user performs the search during the update I want to wait until the update is over while displaying "Please wait" progress alert. I don't want to query and display search results until refresh is fully done.

这是您的决定,但请记住,您正在制造自己的问题。就个人而言,我会放弃这个要求。用户不应该因为闹钟响了而感到不便。

例如,您可以禁用警报并在 Activity 消失时重新启用它。

或者,以原子方式执行更新(例如,对表的副本进行更新,然后在事务中同步表),以便 Activity 仍然可以安全地访问数据库在进行更新时。

What would be a "right" way to properly wait (may be even with status update) in this case?

让服务在更新完成时通过某种回调或广播 Intent 通知 Activity。使进度指示器保持 Activity 状态,直到发生这种情况。这仍然会带来一些时间上的挑战,这就是为什么我只是放弃要求。

关于Android:如何正确等待服务进程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2284836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com