Android BroadCastReceiver 滞后应用程序

发布于 2024-12-28 09:36:24 字数 970 浏览 2 评论 0原文

我在活动中使用的 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 个活动中执行此操作时,我需要添加此广播接收器,我的应用程序开始滞后并且比以前变慢。

那么有没有其他更好的方法来观察意图过滤器而不减慢应用程序/或在我的情况下的最佳方法。

提前致谢!

I have an issue with BroadcastReceiver which I'm using in my activities. I'm actually doing this :

In onCreate() :

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

and in onResume() and onPause() I'm doing this :

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

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

where intentFilter is :

IntentFilter intentFilter = new IntentFilter("finish");

and when I do this in 6 activities where I need to add this broadcast receiver my application start lagging and getting slow than before.

So is there any other better way to watch for intent filters without slowing the app/or best way in my situation.

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

゛时过境迁 2025-01-04 09:36:24

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

getApplication().registerReceiver(接收器,intentFilter);

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

希望这有帮助。

Instead of registering your receiver with Activity's context, register it with your application's context in your 1st activity as below:

getApplication().registerReceiver(receiver, intentFilter);

This way even if your activities goes into 'pause' state, your receiver will remain active as your application will keep on running in the background.

Hope this helps.

始终不够爱げ你 2025-01-04 09:36:24
  • 不要在 onCreate 中注册您的广播接收器。在 onResume 中注册它并在 onPause 中取消注册是安全的,并且在
  • 您必须在接收器方法中进行一些重负载处理的情况下就足够了。 Android 提供了一个 10 秒的窗口来执行您想要在接收器中执行的操作,否则它将声明为 ANR
  • 为了避免延迟,请将处理加载到新的工作线程上
  • dont register your broadcast receiver in onCreate. Registering it in onResume and unregistering in onPause is safe and enough in your case
  • you must be doing some heavy load processing in your receiver method. Android offers a 10sec window to perform what ever you want in your receiver otherwise it will declare it as ANR
  • To avoid lag, load your processing on a new worker thread
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文