【阿里面试题】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();
                }
            }

        }
    }
}


 注册时,指定新进程,便于查看效果:
 
        <receiver
            android:process=".testBR"
            android:name=".activity.TestBroadcastReceiver">
            <intent-filter>
                <action android:name="com.dqqdo.test" />
            </intent-filter>
        </receiver>

 
 执行结果:
 
展开阅读全文

没有更多推荐了,返回首页