Android BroadCastReceiver落后于应用程序

时间:2012-01-20 07:47:56

标签: android broadcastreceiver intentfilter

我在我的活动中使用的BroadcastReceiver存在问题。我实际上是这样做的:

onCreate()

        receiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equals("finish")) {
             // some code
            }               
        }
    };
    registerReceiver(receiver, intentFilter);

并在onResume()onPause()我这样做:

@Override
public void onResume(){
    super.onResume();
    MyCollectionList.this.registerReceiver(receiver, intentFilter);
}

@Override
public void onPause(){
    super.onPause();
    MyCollectionList.this.unregisterReceiver(receiver);
}

其中,intentFilter是:

IntentFilter intentFilter = new IntentFilter("finish");

当我在需要添加此广播接收器的6个活动中执行此操作时,我的应用程序开始滞后并且比之前变慢。

还有其他更好的方法来观察意图过滤器,而不会在我的情况下减慢app /或最佳方式。

提前致谢!

2 个答案:

答案 0 :(得分:2)

不是使用Activity的上下文注册接收者,而是在第一个活动中将其注册到应用程序的上下文中,如下所示:

  

getApplication()。registerReceiver(receiver,intentFilter);

这样即使您的活动进入“暂停”状态,您的接收器也会保持活动状态,因为您的应用程序将继续在后台运行。

希望这有帮助。

答案 1 :(得分:1)

  • 请勿在onCreate中注册您的广播接收器。在onResume中注册它并在onPause中取消注册在你的情况下是安全且足够的
  • 您必须在接收器方法中进行一些重负载处理。 Android提供了一个10秒的窗口,可以在接收器中执行您想要的任何操作,否则它会将其声明为ANR
  • 为避免延迟,请在新的工作线程上加载处理