BroadcastReceiver是Android中最轻薄、最短小的组件,它的对象生命周期十分短暂,经过傻蛋测试在BroadcastReceiver中让线程睡眠10秒(Activity是5秒钟)的话,Android就会弹出错误(和Activity超时的错误相同),同时需要注意的是Activity、Service和BroadcastReceiver都是运行在本进程的主线程里面的。通过这个测试让傻蛋进一步产生了疑问,如果在Service中处理一个长时间的任务会怎么样?

启动一个Service,然后在Service的onCreate()方法中添加如下代码:

try { Log.v(TAG , "sleep start ….."); Thread.sleep(20000); Log.v(TAG,"sleep end ….."); } catch (InterruptedException e) { / / TODO Auto-generated catch block e.printStackTrace(); }

很简单就是让Service睡眠20秒钟,我们会发现,sleep start…. 和 sleep end….这两个日志打印出来了,但是后台还会出现如下错误,前台弹出no response超时对话框。

当傻蛋在onCreate()中新启动一个线程来,睡眠时,程序正常。

所以总结一下:无论是 Activity、BroadcastReceiver还是Service,只要是有长时间处理的任务,就需要重新开一个线程来处理,为什么会这样?因为他们都是运行在主线程中的。

在使用BroadcastReceiver时还有一个我们需要注意的:在BroadcastReceiver的onReceive(Context context , Intent intent )这第一个context到底是哪一个context?是Activity还是Application?通过傻蛋测试发现: 如果你的BroadcastReceiver是通过在Activity中的this.registerReceiver(myBroadcaster, filter); 来注册的话,那么这个context就是这个Activity,而如果是通过AndroidManifest来注册的话,那么这个context就是:android.app.ReceiverRestrictedContext。

更多相关文章

  1. handler机制简析
  2. 【Service 1】Android(安卓)Remote Service - AIDL
  3. Android(安卓)WiFi 电源管理
  4. Android(安卓)NDK C++中的多线程
  5. Android(安卓)Binder 通信机制学习(四)
  6. Android消息机制(Handler)详述
  7. Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
  8. Android学习五 网络编程与handler消息机制
  9. Android双缓冲技术 .

随机推荐

  1. android实现卸载提示
  2. android 混合开发之与js交互
  3. Android,谁动了我的内存(1)
  4. Android彻底组件化—代码和资源隔离
  5. 相对布局各种属性说明
  6. Android(安卓)高管谈 Lollipop:为何它是 A
  7. Android菜单详解——理解android中的Menu
  8. Android画图之Matrix(二)
  9. Android基础笔记(一)-快速入门
  10. RelativeLayout_相对布局 属性的描述