Android完成服务和更新UI中的线程
我有一个关于线程和服务的小问题。我有一个例子,它是在运行在服务中的线程中通过internet下载数据。我想知道的是,我如何检测线程何时完成(所有数据都已下载),然后调用服务的Android完成服务和更新UI中的线程,android,multithreading,service,Android,Multithreading,Service,我有一个关于线程和服务的小问题。我有一个例子,它是在运行在服务中的线程中通过internet下载数据。我想知道的是,我如何检测线程何时完成(所有数据都已下载),然后调用服务的ondestory(),它将在我必须执行的所有活动中更新UI 任何建议如何做到这一点,这是正确的方式,我应该这样做 提前谢谢 1)使用可以使用messenger在活动和服务之间进行通信。2) 如果您的数据存储在某个文件或数据库中,则只需发送一个广播接收器,该接收器将告诉活动该刷新了。3) 使用接口。但在这种情况下,您必须存储
ondestory()
,它将在我必须执行的所有活动中更新UI
任何建议如何做到这一点,这是正确的方式,我应该这样做
提前谢谢 1)使用可以使用messenger在活动和服务之间进行通信。2) 如果您的数据存储在某个文件或数据库中,则只需发送一个广播接收器,该接收器将告诉活动该刷新了。3) 使用接口。但在这种情况下,您必须存储该接口的对象,即使是服务也可以使用该对象 首先,它取决于您使用什么样的web客户端下载数据,该客户端确定传入数据的结束,然后您应该在
服务对象类中调用stopSelf()
方法,而不是在onDestroy()
方法块中定义您的操作
检测已完成的下载:如果您使用的是简单线程而不是,则需要创建一个回调,线程调用该回调来通知服务已完成的下载(例如onDownloadsFinished()
)
与活动沟通:服务和活动之间有很多沟通方式,但我觉得最简单。
当绑定到服务时,活动可以直接在服务中注册回调李>
修改UI:在尝试从回调中更改UI时,请确保使用,因为它将异步执行
停止服务:只要活动绑定到服务,它就会运行。这不是一个问题,因为当执行中没有线程时,它几乎不会消耗任何资源。如果使用startService()
开始后台下载,则只需在onDownloadsFinished()中调用stopSelf()
。查看更多信息
我的想法是,我想在线程完成时获取,然后停止服务。我认为在线程自动完成后,服务不会停止运行。我想这样做,但我不知道我怎么没有这样做,我想知道我仍然不明白,你们是如何实现你们的服务的。如果CPU有密集的工作,比如从web下载,您应该在服务
中创建单独的线程
,这将使此工作正常,线程
将一直存在,直到服务
存在,因为您的服务
在调用stopSelf()
服务
对象后在线程
上保留引用,它的所有内部将被GC销毁。您似乎认为服务
默认具有线程
功能,但这是错误的<代码>服务
是使用线程
对象保存线程功能的唯一必要工具。我知道线程和服务之间的区别。我有一个扩展线程的简单类,还有一个扩展服务的类。所以我在服务
类中开始我的线程
。我想知道当我的线程完成下载文件并启动服务停止时,我如何停止我的服务。这是我无法解决的问题。在官方文档中,有关于如何使用Looper
类在服务
内部实现线程
的详细描述。让你的线程
jsut像那里一样。