
android源码探索
文章平均质量分 66
奋斗的小鹰
记录自己的成长历程
展开
-
Handler源码分析之Message类型
队头是同步消息时,就是正常取出,比如将m1取出了,m2就成了队头,就这样取当取到m3时发现这个msg.target=null,就知道m3是一个屏障消息,取到它代表后面跟着一个急需处理的异步消息(UI刷新消息),那么就会一直往后找直到遍历到m5时发现它是异步消息,那就赶紧把m5先取出并分发它去执行UI刷新的逻辑(这里对应MessageQueue的next()方法中的逻辑),还记得上面mTraversalRunnable吗?所以,当分发了异步消息后,在取下一个消息前,这个屏障消息就被移除了。原创 2023-03-22 17:42:19 · 587 阅读 · 0 评论 -
Handler源码分析之epoll机制
而阻塞是一个和 I/O 相关的概念,这涉及一个操作系统级的操作epoll_wait,当读取磁盘文件时会有内存速度不匹配的问题,中间需要有个缓存过程,是从磁盘读到缓存,缓存满了,再从缓存中读数据,等待缓存满的时候就需要阻塞住先不读取。举个例子,假设你要收个快递,但你不知道快递小哥什么时候送,你又没有其他事可做,那么你可以去睡觉了(释放cpu资源),因为你知道快递小哥到了会打电话通知你,这个睡觉的状态就是。epoll可以过滤出可以进行读写的流,而不用我们再去轮询了,此时我们对所有流的处理都是有意义的。原创 2023-03-22 11:05:17 · 599 阅读 · 0 评论 -
HandlerThread源码分析
它是一个封装了Looper(Handler)机制的Thread。你可以将一些需要串行执行的子任务(耗时任务)交给它去做。*注:阅读本文需要具备基本的Handler基础。HandlerThread是什么?它的应用场景是什么?原创 2023-03-20 16:19:24 · 114 阅读 · 0 评论 -
Activity的启动流程
ActivityThread是我们常说的主线程或UI线程,ActivityThread的main方法是整个APP的入口,整个App的启动是从这里开始的,大家赶紧倒杯茶压压惊,下面我们开始探索源码!先要简单说明的是这个系列的主题是Activity启动相关的源码分析,我们只关心Activity相关的部分,其他核心的代码在这里不做分析。在做源码分析时我有几个心得跟大家分享一下:明确目标,即你想弄懂什么?关注核心,学会找到一个方法中的核心部分不入歧途,比如在研究Activity相关源码的过程中,出现了se原创 2020-11-23 13:45:22 · 266 阅读 · 0 评论 -
ThreadLocal源码理解
前言在之前的工作和学习中比较少涉及到ThreadLocal的使用,直到学习Handle消息机制时,在Looper类中使用了ThreadLocal,于整个Handle机制而言ThreadLocal的意义还是很重要的,在后来的某条面试中也被问到过,也证明ThreadLocal是有必要学习一下的。 private static void prepare(boolean quitAllowed) { ...... sThreadLocal.set(new Looper(quitA原创 2020-08-26 11:25:34 · 179 阅读 · 0 评论 -
android:系统Toast变身
本次对Toast的探索的原由是在做屏幕适配时改变了系统Density导致Toast变小了,上真相:想到的最直观的解决方案就是能否把显示的文字的字号变大,ok打开源码看下是否提供了对应的Api。//从Toast.makeText(MainActivity.this, "hide",Toast.LENGTH_LONG).show();跟入public static Toast makeText(@NonNull Context context, @Nullable Looper looper,原创 2020-06-05 10:57:27 · 426 阅读 · 0 评论 -
Handler机制源码分析
一、Handler使用上需要注意的几点1.1 handler使用不当造成的内存泄漏public class MainActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getSimpleName()+">>>"; private T...原创 2020-02-12 15:28:53 · 414 阅读 · 0 评论 -
从源码探索Activity布局加载过程
众所周知,Activity是承载布局的重要组件,是通过setContentView()方法来设置xml布局文件的,那么我们来提出几个问题 1.布局文件到底是怎么加载到Activity并显示到屏幕的呢? 2.我们给activity设置了主题,它对应的样式代码是在哪设置的呢?下面我们跟踪源码来探索一下。 首先,我们点开setContentView()方法 publi...原创 2019-04-24 16:52:25 · 324 阅读 · 0 评论 -
Android:梳理Activity,ViewGroup,View的事件分发机制
随着手机App的发展,基础组件已经很难满足我们的需求,因此自定义view成为了我们常见的开发需求,而今天的主题事件的分发机制无疑是自定义view的一个基础。那么我们就从源码的角度来梳理一下,从手指触到屏幕的那一刻起到底发生了什么。首先我们需要知道的是四种触摸事件类型,即:MotionEvent.ACTION_DOWN 手指刚接触屏幕的时刻 MotionEvent.ACT...原创 2019-08-31 23:02:20 · 627 阅读 · 0 评论