2011-04-24 79 views
0

android开发人员网站声明,在onReceive()方法返回后,您可以删除BroadcastReceiver进程,并且不应在BroadcastReceiver内启动线程/计时器。但是这与Thread/Timer类的静态实例变量有什么关系?我认为这些静态实例变量仍然存在,因为它们绑定到加载的类?或者我错了(例如,因为该流程是在一个新的dalvik JVM中启动的),我是否应该从不在BroadcastReceivers中使用线程/定时器?Android BroadcastReceiver线程/计时器作为静态实例变量

回答

1

还是我错了(例如,由于过程是一个新的Dalvik JVM内开始),并应我从来没有BroadcastReceivers中使用线程/定时器?

如果BroadcastReceiver在清单登记,不派生线程,启动定时器,注册听众,或以其他方式做任何事情绑到接收器,将需要生活超越了接收器。如果您的应用程序没有其他任何内容运行,那么您的流程随时都有资格终止,随身携带您的资料。

如果BroadcastReceiver是通过registerReceiver()从其他组件注册的,那么其他组件可以fork线程,启动计时器,注册监听器或其他任何组件,但要遵守该组件的正常规则。

+0

如果我的应用程序中还有其他内容正在运行(例如AppWidgetProvider),会发生什么情况。在这种情况下,流程是否有资格终止?或者静态实例变量是否仍然存在,线程/定时器是否工作? – Erwin 2011-04-24 20:12:28

+0

@Erwin:一个'AppWidgetProvider'运行几毫秒并消失 - 它是一个清单注册的'BroadcastReceiver'。 “在这种情况下,流程是否有资格终止?” - 绝对。它需要一个活动或服务来保持服务的活力。 “或者静态实例变量是否仍然存在,线程/定时器是否工作?” - 请不要使用清单注册的'BroadcastReceiver'中的线程/定时器。 – CommonsWare 2011-04-24 20:30:57