BroadcastReceiver
的onReceive()
方法是否线程安全,或者我需要自己实现同步?
如果我有任何类级别变量在onReceive()
方法中使用,并且onReceive()
方法被快速地多次调用,那么会引起问题吗?
public class MyBroadCastReceiver extends BroadcastReceiver {
boolean isFirstTrigger = true;
@Override
public void onReceive(Context context, Intent arg1) {
if(isFirstTrigger)
{
//Do something time consuming
isFirstTrigger = false;
}
}
onReceive()
在主应用程序线程上调用。每个进程有一个主应用程序线程。因此,默认情况下,您可以保证这三个广播将串行运行。 - CommonsWareonReceive()
在主应用程序线程上调用。无论您在哪里注册接收器,onReceive()
都会在主应用程序线程上调用。无论广播发送多少次,onReceive()
都会在主应用程序线程上调用。无论您的Intent
过滤器是什么样子,onReceive()
都会在主应用程序线程上调用***。由于只有一个主应用程序线程,根据定义,onReceive()
必须按顺序执行。 - CommonsWareonReceive()
在主应用程序线程上调用。广播发送者使用的线程并不重要。毕竟,对于系统广播,发送者位于完全分离的应用程序中。这种行为是否可以接受取决于您自己的决定,因为我不知道什么是可以接受的或不可以接受的。 - CommonsWare