我有一个关于线程和服务的小问题。我有一个例子,它正在服务中运行的线程中通过互联网下载数据。我想知道的是如何检测我的线程何时完成(所有数据都已下载)然后调用服务的 onDestroy()
这将更新我必须执行的所有 Activity 中的 UI这样做。
关于如何做到这一点的任何建议以及我应该这样做的正确方法。
提前致谢!
最佳答案
- 检测完成的下载:如果您使用简单的线程而不是 AsyncTask ,您需要创建一个由线程调用的回调,以通知服务有关已完成的下载(例如
onDownloadsFinished()
)。 - 与 Activity 通信:服务和 Activity 之间有很多通信方式,但我发现 binding to a service最简单的。 当绑定(bind)到服务时, Activity 可以直接在服务中注册回调。
- 修改用户界面:确保使用 runOnUiThread当尝试从回调中更改 UI 时,因为它将异步执行。
- 停止服务:只要 Activity 绑定(bind)到服务,它就会运行。这不是问题,因为当执行某事时没有线程时,它几乎不会消耗任何资源。如果您使用
startService()
开始后台下载,您只需在onDownloadsFinished()
中调用stopSelf()
。检查service documentation了解更多信息。
关于Android 在 Service 中完成线程并更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8323045/