BroadcastReceiver onReceive()线程安全吗?

时间:2013-09-06 16:43:35

标签: 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;
       }
      }

1 个答案:

答案 0 :(得分:7)

  

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

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

  

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

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