Android 一张图看明白Hander的运行机制
2015-11-09 17:56
495 查看
另外:之前记得一次面试被问到在子线程是否可以创建Hander并发送消息的时候,因为没有这么做过没有答上来,之后看了一下源码,必须可以的。但是前提是你必须得手动调用Looper.prepare()方法来保证 你的Looper对象不为空和主动调用Looper.loop()方法。那为什么之前我们在主线程中使用Hander的时候没有手动调用Looper.prepare()方法却没有报错呢,请移步到Looper.prepareMainLooper()方法看一下。系统在启动的时候已经调用了些方法来保证主线程中初始化过Looper所以你可以肆无忌惮的直接使用Hander来进行的通讯
另外很多人问:Hander、looper、Message是否都会在同一个线程
Looper、MessageQueue,你在哪个线程创建了Looper和Handler 那么Looper/MessageQueue/Hander就会在哪个线程,但是他们也是可以分离的,Looper To Hander你可以理解为轮循到消息以后执行了一个handler的回调。Handler 他Looper可以在同一线程,也可以不在同一个线程。有一种特殊情况如果你在主线程中重新赋值运用了子线程提供的Looper
那么此时Handler就在主线程、Looper及MessageQueue在子线程。
相关文章推荐
- 调用 BitmapFactory.decodeByteArray 函数返回 null 值
- [Android开发]三级缓存初探索
- 支持addHeaderView、 addFooterView、分页加载数据的RecyclerView
- 怎样用 Android Annotations 写出高性能代码
- Android自定义控件之仿美团下拉刷新
- 监听android home键的实现方式
- Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释
- Android自定义控件之仿汽车之家下拉刷新
- cordova android项目自定义插件及使用(一)
- Android应用程序打包时,出现错误:"XXX" is not translated in "af" (Afrikaans), "am" (Amharic), "ar" (Arabic).....
- Android中的Parcel机制 实现Bundle传递对象
- android 异常 :ScrollView can host only one direct child
- Android-Android5.1屏幕固定功能(screen pinning)分析
- MAC OS 下使用Android Studio获取开发版和发布版SHA1证书
- Android 内存分析
- Android Volley框架的使用(三)
- 解决Android开发中,ActiveAndroid和Gson同时使用,对象序列化失败的问题
- 《ArcGIS Runtime SDK for Android开发笔记》——数据制作篇:紧凑型切片制作(Server缓存切片)
- android wear 真机截图
- Android——支付宝SDK调用(移动应用接入支付宝支付,提供安全、便捷的支付能力)