2010-07-23 79 views
0
  1. 广播接收器接收广播,打开激活锁定,启动服务
  2. 服务打开另一个激活锁定,然后发送“释放激活锁定”播出
  3. 广播接收器接收释放激活锁定广播和释放其激活锁定
  4. 服务做它的东西,并释放其激活锁定

还有一个问题,但。目前,BroadcastReceiver将其WakeLock作为成员变量存储。有时候,垃圾收集器将运行的BroadcastReceiver启动该服务后,却收到释放激活锁定播出前,然后我得到接近力,因为激活锁定定稿被释放之前(因为它会收集的垃圾)。Android BroadcastReceiver等待服务启动或将WakeLock传输到服务?

所以我需要在的onReceive方法,请执行下列操作之一:

  • 等待服务启动,等待它建立其激活锁定,然后松开广播接收器激活锁定;在“释放激活锁定”广播将不再需要
  • ,或以某种方式激活锁定传输到服务,那么该服务会负责释放单激活锁定

哪一个是更好的选择,我将如何完成它?

回答

0

使用静态WakeLock。更好的是,使用我的WakefulIntentService,它涵盖了整个模式。

+0

是否有任何理由不去消除服务并在我的BroadcastReceiver中实现一切?我想也许我一直在给予服务的想法太多,也许所有这些都是不必要的。实际上,我甚至不需要任何唤醒锁,因为系统在onReceive方法期间建立了一个WakeLock(在这个方法中我将尽其所能)。 – Ricket 2010-07-23 22:58:05

+0

“是否有任何理由不去消除服务并在我的BroadcastReceiver中实现所有内容?” - 如果要完成的工作很快(例如50ms),那么我会把它全部放入接收器。否则,您将从前台进程中窃取大量CPU时间,并且在您的活动恰好处于前台时绑定主要应用程序线程。 '的onReceive()'有前景的优先级运行,所以如果你正在做认真的工作,您可以享受足够的CPU周期来重击游戏用户可能在当时被打的帧速率。 – CommonsWare 2010-07-24 01:07:57