【发布时间】:2011-11-30 08:32:37
【问题描述】:
我有一个关于线程和服务的小问题。我有一个示例,它在服务中运行的线程中通过 Internet 下载数据。我想知道的是如何检测我的线程何时完成(所有数据都已下载),然后调用服务的onDestroy(),这将在我必须执行的所有活动中更新 UI。
任何建议如何做到这一点,这是我应该这样做的正确方式。
提前致谢!
【问题讨论】:
标签: android multithreading service
我有一个关于线程和服务的小问题。我有一个示例,它在服务中运行的线程中通过 Internet 下载数据。我想知道的是如何检测我的线程何时完成(所有数据都已下载),然后调用服务的onDestroy(),这将在我必须执行的所有活动中更新 UI。
任何建议如何做到这一点,这是我应该这样做的正确方式。
提前致谢!
【问题讨论】:
标签: android multithreading service
onDownloadsFinished()) .startService() 开始后台下载,您只需在onDownloadsFinished() 中调用stopSelf()。更多信息请查看service documentation。【讨论】:
1) use 可以利用 messenger 在活动和服务之间进行通信。 2)如果您的数据存储在某个文件或数据库中,那么只需发送一个广播接收器,它将告诉活动它的刷新时间。 3)使用界面。但在这种情况下,您必须存储该接口的对象,甚至服务也可以使用。
【讨论】:
首先这取决于你使用什么样的网络客户端来下载数据,这个客户端决定传入数据的结束,然后你应该在你的Service对象类中调用stopSelf()方法而不是在@987654323中定义你的动作@方法的块
【讨论】:
Service 中创建单独的 Thread,这将使这项工作和 Thread 将一直存在,直到您的 Service 存在,因为您的 Service在调用 stopSelf() Service 对象后保留 Thread 上的引用,并且它的所有内部都将被 GC 销毁。您似乎认为Service 默认具有Thread 功能,但这是错误的。 Service 是唯一必要的,它可以保持线程的功能,使用Thread 对象。
Thread 的简单类,我还有另一个扩展Service 的类。所以我在service 课程中开始我的thread。我想知道当我的线程完成下载文件并触发服务停止时如何停止我的服务。这是我的问题,我想不通。
Service中实现Thread,使用Looper类。让你的Thread 像那里一样。