BroadcastReceiver 不能执行耗时操作

原因有二:


第一  

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 不能执行耗时操作_第1张图片

你可能感兴趣的:(BroadcastReceiver 不能执行耗时操作)