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

Android:如何正确等待服务流程完成,第1张

概述这是场景:>我有2项活动和一项服务>第一个活动是着陆视图/搜索页面.第二个活动显示搜索结果>始终针对内部SQLite数据库执行搜索>定期(比如说每天)db需要从远程源更新,这是一个漫长的过程>如果用户在更新期间执行搜索,我想等到更新结束,同时显示“请稍候”进度警报.在刷新完全完成之

这是场景:

>我有2项活动和一项服务
>第一个活动是着陆视图/搜索页面.第二个活动显示搜索结果
>始终针对内部sqlite数据库执行搜索
>定期(比如说每天)db需要从远程源更新,这是一个漫长的过程
>如果用户在更新期间执行搜索,我想等到更新结束,同时显示“请稍候”进度警报.在刷新完全完成之前,我不想查询和显示搜索结果.
>数据库更新由AlarmManager触发并由服务执行,该服务在更新过程中将“更新”状态置于数据库中
>我可以轻松查询状态,但如何等待并定期重新查询数据库?我正在使用AsyncTask来处理搜索结果,而我的下意识反应就是将一个带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.

这是你的电话,但要记住你正在创造自己的问题.就个人而言,我会抛弃这个要求.用户不应仅仅因为闹钟响起而感到不便.

例如,您可以禁用警报并在活动消失时重新启用警报.

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

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

让服务在更新完成后通过某种回调或广播Intent告诉活动.保持进度指示器保持活动状态直到发生这仍然会引入一些时序挑战,这就是为什么我只是抛弃了这个要求.

总结

以上是内存溢出为你收集整理的Android:如何正确等待服务流程完成全部内容,希望文章能够帮你解决Android:如何正确等待服务流程完成所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1117497.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存