在Android

时间:2017-07-04 07:21:42

标签: android broadcastreceiver android-service android-handler

我知道服务正在主线程上运行,为什么我们使用Broadcast Receiver或Handler来更新android中的UI。我们可以直接更新UI而无需在android中使用处理程序或广播接收器。我很困惑,所以请澄清这个讨论。

2 个答案:

答案 0 :(得分:2)

答案:创建您的活动,注册您的广播接收器etvoilà!

详细说明: 在您的问题中,您可以参考服务和处理程序,它们可以在另一个线程中启动。 - >当在UI线程之外运行的服务应该与UI线程通信时,处理程序用于进程间通信。 - >服务专为长期流程案例而设计。

在您的问题中,您可以参考广播接收器,它可以从服务中或从活动中启动。 - >如果要使用某些系统(和其他自定义)事件更新UI,则始终需要广播接收器。 - >如果它只是捕获事件并更新字段,这不是一个漫长的过程。但是,如果它是关于捕获和读取数据库,或访问Web服务(非常异步操作),那么这是一个漫长的过程。

答案 1 :(得分:0)

要更新UI,您需要具有对视图的引用。您无法获得对服务中视图的引用。但你可以做活动。这就是为什么在服务中执行活动之前必须强制更新UI的原因(因为服务本身没有UI)。

您可以将对UI的引用传递给服务,但由于Activity和服务生命周期可能会有所不同,它可能会导致内存泄漏,并且您可能最终导致服务锁定Activity的死锁GCed和Activity锁定服务。