美文网首页
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 不能执行耗时操作

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