2011-11-30 47 views
4

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

任何建议如何做到这一点,是我应该做的正确方法。

在此先感谢!

回答

0

1)使用可以利用信使为了在活动和服务之间进行沟通。 2)如果你的数据存储在某个文件或数据库中,那么只需发送一个广播接收器,它会告诉活动它的时间刷新。 3)使用界面。但在这种情况下,您将不得不存储即使服务可以使用的该接口的对象。

0

首先这取决于你用什么样的网络客户端的下载数据,此客户端确定收到的数据结束后,你应该叫stopSelf()方法在Service对象类比onDestroy()方法的块定义你的行动

+0

这个想法是,我想在线程完成时得到并在此之后停止我的服务。我不认为服务将在线程自动完成后停止运行。我想这样做,但我不知道如何 –

+0

如何直接在代码中停止线程? – teoREtik

+0

我不是这样做的,我想知道 –

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