美文网首页
BroadcastReceiver 不能执行耗时操作

BroadcastReceiver 不能执行耗时操作

作者: 三眼卡夫卡a | 来源:发表于2018-07-24 15:21 被阅读0次

原因有二:

第一  

BroadcastReceiver 一般处于主线程。  耗时操作会导致 ANR

第二

BroadcastReceiver 启动时间较短。 

如果一个进程里面只存在一个 br组件。并且在其中开启子线程执行耗时任务。 

系统会认为该进程是优先级最低的 空进程。很容易将其杀死。

测试代码:

/**

* 时间:2017/12/19 14:05

* @author duqingquan

*/

public class TestBroadcastReceiver extends BroadcastReceiver {

    @Override

    public void onReceive(Context context, Intent intent) {

        int pid = Process.myPid();

        LogUtil.d("当前pid ---- " + pid);

        LogUtil.d("当前线程 ---- " + Thread.currentThread().getName());

        new TestThread().start();

    }

    class TestThread extends Thread{

        @Override

        public void run() {

            for(int i = 0; i < 10; i++){

                int pid = Process.myPid();

                LogUtil.d("当前pid ---- " + pid);

                LogUtil.d("TestThread is work ... " + i);

                try {

                    Thread.sleep(1000);

                } catch (InterruptedException e) {

                    e.printStackTrace();

                }

            }

        }

    }

}

 注册时,指定新进程,便于查看效果:

            android:process=".testBR"

            android:name=".activity.TestBroadcastReceiver">

           

               

 执行结果:

相关文章

  • BroadcastReceiver 不能执行耗时操作

    原因有二: 第一 BroadcastReceiver 一般处于主线程。 耗时操作会导致 ANR 第二 Broad...

  • 广播,广播接收者,eventbus

    BroadcastReceiver内的接收在主线程,所以不能执行耗时操作,超过10秒ANR,发起广播不受线程限制,...

  • 如何在BroadcastReceiver中执行耗时操作

    在回答这个问题之前,首先简单介绍一下 BroadcastReceiver的用法应注意的地方及其生命周期。 一、Br...

  • 2019-04-16

    怎么在BroadcastReceiver(广播)里做耗时操作? 最近刚好遇到一个耗时操作的问题,因为用到逻辑里...

  • Service

    Android的Service Service是在main Thread中执行,Service中不能执行耗时操作(...

  • Android接口回调

    需求 用户点击按钮,触发执行耗时操作。程序开启子线程,然后在子线程中执行耗时操作。当耗时操作执行完毕后,执行回调函...

  • Android中的线程池

    在Android中,主线程不能执行耗时的操作,否则可能会导致ANR。那么,耗时操作应该在其它线程中执行。线程的创建...

  • Something About NSThread

    iOS开发中不能将太耗时的操作放在主线程中执行,否则会造成线程的阻塞。通常解决方案就是将耗时的操作另开一个线程执行...

  • Android异步精髓Handler分析

    前言 我们都知道在Android中有个不成文的规定 主线程可以刷新ui,不能执行耗时操作 子线程中可以进行耗时操作...

  • Android异步任务实现详解

    在Android开发中,主线程(UI线程)不能执行耗时的操作,通常将一些耗时的操作使用异步任务的方式进行处理,简单...

网友评论

      本文标题:BroadcastReceiver 不能执行耗时操作

      本文链接:https://www.haomeiwen.com/subject/pwnksftx.html