我知道服务正在主线程上运行,为什么我们使用Broadcast Receiver或Handler来更新android中的UI。我们可以直接更新UI而无需在android中使用处理程序或广播接收器。我很困惑,所以请澄清这个讨论。
答案 0 :(得分:2)
答案:创建您的活动,注册您的广播接收器etvoilà!
详细说明: 在您的问题中,您可以参考服务和处理程序,它们可以在另一个线程中启动。 - >当在UI线程之外运行的服务应该与UI线程通信时,处理程序用于进程间通信。 - >服务专为长期流程案例而设计。
在您的问题中,您可以参考广播接收器,它可以从服务中或从活动中启动。 - >如果要使用某些系统(和其他自定义)事件更新UI,则始终需要广播接收器。 - >如果它只是捕获事件并更新字段,这不是一个漫长的过程。但是,如果它是关于捕获和读取数据库,或访问Web服务(非常异步操作),那么这是一个漫长的过程。
答案 1 :(得分:0)
要更新UI,您需要具有对视图的引用。您无法获得对服务中视图的引用。但你可以做活动。这就是为什么在服务中执行活动之前必须强制更新UI的原因(因为服务本身没有UI)。
您可以将对UI的引用传递给服务,但由于Activity和服务生命周期可能会有所不同,它可能会导致内存泄漏,并且您可能最终导致服务锁定Activity的死锁GCed和Activity锁定服务。