10 2017 档案
EventBus3.0源码学习(4) threadMode
摘要:线程模式 POSTING:该模式不需要线程切换,为默认模式。在post线程直接调用事件订阅函数。 MAIN:若post线程是主线程,则与POSTING模式一样;否则,由mainThreadPoster进行处理,从主线程调用事件订阅函数。 BACKGROUND:若post线程不是主线程,则与POSTI 阅读全文
posted @ 2017-10-20 11:51 游不动の鱼 阅读(939) 评论(0) 推荐(0)
EventBus3.0源码学习(3) SubscriberMethodFinder
摘要:订阅函数查找 当一个对象调用register向EventBus注册时,查找对象中所有接收订阅事件的函数被封装在SubscriberMethodFinder类中。findSubscriberMethods的实现如下: 若ignoreGeneratedIndex为true,则调用findUsingRef 阅读全文
posted @ 2017-10-19 16:04 游不动の鱼 阅读(534) 评论(0) 推荐(0)
EventBus3.0源码学习(2) post
摘要:发送事件(post) 当需要发送事件时,调用EventBus.getDefault().post(event)即可,EventBus会将事件发送给所有已经注册了监听该类事件的订阅者。post的实现如下: 第2-4行,currentPostingThreadState是ThreadLocal<Post 阅读全文
posted @ 2017-10-18 11:32 游不动の鱼 阅读(402) 评论(0) 推荐(0)
EventBus3.0源码学习(1) register和unregister
摘要:引子 EventBus提供了一套完善的总线机制,能有效地用于模块间解耦。要使用EventBus,在项目模块的build.gradle中添加如下依赖即可: 类定义 注册(register) 当一个对象想要从EventBus接收事件时,只需在EventBus中进行注册自己,调用EventBus.getD 阅读全文
posted @ 2017-10-17 18:04 游不动の鱼 阅读(1416) 评论(0) 推荐(0)
Android源码学习(4) Handler之ThreadLocal
摘要:线程的threadLocals Looper通过sThreadLocal来设置线程与Looper的对应关系,sThreadLocal是范型类ThreadLocal<Looper>的实例,其添加、移除元素的操作如下: 从代码中可以看出,Looper对象实际上是被添加到当前线程的本地数据表中(t.thr 阅读全文
posted @ 2017-10-14 23:25 游不动の鱼 阅读(1401) 评论(0) 推荐(0)
Android源码学习(3) Handler之MessageQueue
摘要:消息出队 MessageQueue封装了以单向列表实现的Message队列。在Looper循环中,通过调用MessageQueue的next()方法将队首元素出队进行处理: 当队首元素执行时间未 或 队首元素为SyncBarrier且队列中没有asynchronous的Message 或 队列为空时 阅读全文
posted @ 2017-10-12 20:08 游不动の鱼 阅读(444) 评论(0) 推荐(0)
Android源码学习(2) Handler之Looper
摘要:Looper准备 Handler实例化时,会从当前线程获取Looper,从而获得MessageQueue,用于发送消息。然而,线程不是生来就有Looper对象的,需要在线程执行中调用静态方法Looper.prepare(),最终会调用到如下静态方法: 静态变量sThreadLocal是范型类Thre 阅读全文
posted @ 2017-10-12 12:06 游不动の鱼 阅读(288) 评论(0) 推荐(0)
Android源码学习(1) Handler
摘要:Handler的实例化 在安卓开发中,经常会用到Handler将任务提交到指定线程(例如主线程)去执行或者让其延迟执行。Handler的构造函数有多种重载形式,但最终都调用到如下两种之一: 可以看到:这两个构造函数的区别只是Looper的获取方式不一样,当未指定Looper时,Handler内部会通 阅读全文
posted @ 2017-10-08 22:55 游不动の鱼 阅读(401) 评论(0) 推荐(0)