Android 在 Service 中完成线程并更新 UI

标签 android multithreading service

我有一个关于线程和服务的小问题。我有一个例子,它正在服务中运行的线程中通过互联网下载数据。我想知道的是如何检测我的线程何时完成(所有数据都已下载)然后调用服务的 onDestroy() 这将更新我必须执行的所有 Activity 中的 UI这样做。

关于如何做到这一点的任何建议以及我应该这样做的正确方法。

提前致谢!

最佳答案

  1. 检测完成的下载:如果您使用简单的线程而不是 AsyncTask ,您需要创建一个由线程调用的回调,以通知服务有关已完成的下载(例如 onDownloadsFinished())。
  2. 与 Activity 通信:服务和 Activity 之间有很多通信方式,但我发现 binding to a service最简单的。 当绑定(bind)到服务时, Activity 可以直接在服务中注册回调。
  3. 修改用户界面:确保使用 runOnUiThread当尝试从回调中更改 UI 时,因为它将异步执行。
  4. 停止服务:只要 Activity 绑定(bind)到服务,它就会运行。这不是问题,因为当执行某事时没有线程时,它几乎不会消耗任何资源。如果您使用 startService() 开始后台下载,您只需在 onDownloadsFinished() 中调用 stopSelf()。检查service documentation了解更多信息。

关于Android 在 Service 中完成线程并更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8323045/

相关文章:

multithreading - 为什么这个变量定义意味着静态生命周期?

java - 组件提供服务

Android - 跨多个 Activity 管理本地服务绑定(bind)/解除绑定(bind)的有效方法

android - 如何在不使用缩放控件的情况下检测何时更改 webview 中的缩放?

android - ActionBar 外部的自定义溢出菜单

java - 在模拟器中运行时,libgdx 在 helloworld 应用程序上抛出异常

Android webservice GET 请求只回复部分 XML 响应

c# - Task.Delay().Wait() 是怎么回事?

java - 理解 ConcurrentHashMap 计算方法的代码

php - 使用 mysqli_connect 检查 MySQL 是否在没有凭据的情况下运行?