BroadcastReceiver onReceive()线程安全吗?

Man*_*ish 5 android

是线程安全的onReceive()方法BroadcastReceiver还是我需要自己实现同步?

如果我有任何在该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;
       }
      }
Run Code Online (Sandbox Code Playgroud)

Com*_*are 7

BroadcastReceiver线程的onReceive()方法是安全的还是我需要自己实现同步?

它只会在主应用程序线程上调用.因此,对于在主应用程序线程上运行的任何其他内容,它是线程安全的.

如果我在onReceive()方法中使用了任何类级别变量,并且很快多次调用onReceive()方法,它会导致问题吗?

如果BroadcastReceiver在清单中注册,则为每个广播创建一个新实例.这就是您通常不会看到数据成员的原因BroadcastReceiver.

  • @Manish:是的.让我们这次尝试粗体斜体:***`onReceive()`在主应用程序线程***上调用.注册接收器的位置无关紧要,***`onReceive()`在主应用程序线程***上调用.发送广播的次数无关紧要,在主应用程序线程***上调用***`onReceive()`.你的`Intent`过滤器看起来没什么关系,***`onReceive()`在主应用程序线程***上调用.并且由于只有一个主应用程序线程,根据定义,`onReceive()`必须按顺序执行. (2认同)