1、为什么不用Activity、BroadcastReceiver处理耗时操作?
主线程 (“事件处理线程” / “UI线程”) 在5秒内没有响应输入事件, BroadcastReceiver 没有在10秒内完成返回的情况下,Android会出现ANR错误。
2、为什么不直接抛出Thread进行处理而要采用Service?
3、使用方式:
Service启动时,注册BroadcastReceiver ,同时启动处理线程;
Service中定义BroadcastReceiver 内部类,用于接收数据;
BroadcastReceiver 中调用处理线程的handler,通过handler.sendMessage();
由Handler完成数据的最终处理;
其中,
Service提供处理环境或者说容器;
BroadcastReceiver 用于接收外部传送至Service的数据,并调用handler;
Thread(Handler)真正完成数据的处理;
public class MyService extends Service{ private MyThread myThread; oncreate(){ //启动处理线程 myThead.start(); //注册监听 registerReceiver(); } onDestroy(){ myThread.release(); unregisterReceiver(); } public class MyReceiver extends BroadcastReceiver { onReceive(){ // myThread.handler.sendMessage(); } } }
public class MyThread extends Thread { private Looper looper; private MyHandler myHandler; run(){ Looper.prepare(); looper = Looper.myLooper(); myHandler = new MyHandler(looper); looper.loop(); } realease(){ loop.quit(); } }