原因有二:
第一
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">
执行结果: