BroadcastReceiver 不能执行耗时操作

2018-07-24  本文已影响0人  三眼卡夫卡a

原因有二:

第一  

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">

           

               

 执行结果:

上一篇 下一篇

猜你喜欢

热点阅读