Android 从源码看Handler消息机制
来源:互联网 发布:苹果电脑怎样删除软件 编辑:程序博客网 时间:2024/05/18 03:09
今天闲的无聊,实在不知道干嘛了,就想起来android中很重要的一个东西,消息机制,也就是我们常说的handler消息机制,下面我们就来一起看看;
1 实例化Handler
Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { } }; 我们来看看Handler里面的handleMessage的方法说明,有这么一句话: /** *子类必须实现,虽然不是抽象方法 * Subclasses must implement this to receive messages. */ public void handleMessage(Message msg) { }
2 分发消息
/** * Handle system messages here. */ public void dispatchMessage(Message msg) { if (msg.callback != null) { handleCallback(msg); } else { if (mCallback != null) { if (mCallback.handleMessage(msg)) { return; } } handleMessage(msg); } }我们一般使用message只会给what和obj赋值,其实Message还有其他字段,如callBack,而mallback就Handler里面的一个接口,只有在使用public Handler(Callback callback, boolean async) 重载方法的时候才会给他赋值,所以这里他是null,这样就直接调用了Handler的handleMessage方法,讲消息分发到了我们重写的handleMessage方法再进行处理;
3 获取msg
public static Message obtain() { synchronized (sPoolSync) { if (sPool != null) { Message m = sPool; sPool = m.next; m.next = null; m.flags = 0; // clear in-use flag sPoolSize--; return m; } } return new Message(); }或者new Message()都可以;
4 发送消息
private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) { msg.target = this; if (mAsynchronous) { msg.setAsynchronous(true); } return queue.enqueueMessage(msg, uptimeMillis); }源码中消息最终在这里加入消息队列,而这个方法就是Handler里面的方法,this指的就是Handler,可以看出,每一个Message都有一个标记。
5 消息队列
如果在主线程中new Handler的话,系统或初始化一个,所以我们可以直接用:
private Looper(boolean quitAllowed) { mQueue = new MessageQueue(quitAllowed); mThread = Thread.currentThread(); }
如果在子线程:
public static void prepare() { prepare(true); } private static void prepare(boolean quitAllowed) { if (sThreadLocal.get() != null) { throw new RuntimeException("Only one Looper may be created per thread"); } sThreadLocal.set(new Looper(quitAllowed)); } private Looper(boolean quitAllowed) { mQueue = new MessageQueue(quitAllowed); mThread = Thread.currentThread(); }子线程要先prepare,可以看出其实最终都是调用的Looper这个方法;
0 0
- Android 从源码看Handler消息机制
- 从源码看Handler消息机制
- 【Android】从源码角度看Handler机制
- [Android] 从源码分析 Handler 消息机制
- Android 从源码分析Handler消息机制
- 重新从源码的角度看Handler消息通信机制
- 带你从源码看Android Handler 异步消息处理机制完全解析
- 从源码看Android消息机制
- Handler消息机制与AsyncTask深度解析-从源码带你看handler
- Android从源码分析一:Looper,Handler消息机制
- 从源码分析Android中Handler的消息传递机制
- 从源码来一步一步解析Android中Handler消息机制
- 菜鸟从源码分析Handler消息机制
- Handler消息处理机制---从源码分析
- Android消息机制 Handler源码分析
- Android Handler 消息响应机制源码分析
- Android消息机制Handler源码简单解析
- Android Handler消息机制源码分析
- Android事件派发机制简析
- [干货] 【译】Android 开发规范与应用
- Call Requires API level 11 (current min is 8) Android.App.Activity#onCreateView
- CentOS服务器防暴力破解
- Java多线程3:Thread中的静态方法
- Android 从源码看Handler消息机制
- 448. Find All Numbers Disappeared in an Array
- 二叉树算法应用案例
- URLEncoder和URLDecoder
- java基础知识巩固
- 前端试题
- Java多线程4:synchronized锁机制
- Leetcode 129. Sum Root to Leaf Numbers 计算路径和 解题报告
- DrawerLayout