Android 源码分析
文章平均质量分 89
夏至的稻穗
只要结果是正确的,过程你让我多痛苦都行
展开
-
Android 添加蓝牙遥控按键
一. 蓝牙遥控器的原理本文源码给予 amlogic 9.0蓝牙遥控器的原理如下图从流程上我们可以发现,我们遥控器的码值被转化了几次: HID码值–→Linux event–→ 根据Vendor、Product转化为Android事件。二. 按键知识适配可以发现,一些按键不可用,说明按键值为添加和适配。通过 getevent 可以拿到其中一个按键的值:****从上图可以知道名字:蓝牙遥控器的名字为 BT_Smart_RC001007004a :其中,高位为 usage page (原创 2021-10-21 19:55:42 · 7628 阅读 · 0 评论 -
Activity 之 Window 创建过程
上一章 Android理解 Window 与 WindowManager,我们已经学习了 Window - ViewRootImpl - View 之间的关系,也知道 Window 实际是通过 WindowManagerService 去创建的。那么 Activity 的 window 是怎么创建的呢?一. Activity 的创建流程简述首先,从 Activity启动流程 (基于8.0源码) 一文中,我们已经知道,Activity 的创建,最后会通过 ActivityThread 的 handleL原创 2020-07-04 23:54:53 · 584 阅读 · 0 评论 -
Android理解 Window 与 WindowManager
这个东西比较复杂,笔者能力有限,只能把自己理解说一下,如果有不对的地方,望指正。一 、 Window 介绍在我们日常开发中,Window 看似接触的不错,实际上,Android 中所有的视图都是通过 Window 来呈现的,不管是 Activity,Dialog、Taost 还是 PupopWindow ,它们的视图其实都是附加在 Window 上的。Window 是一个抽象类,它的具体类是 PhoneWindow,它的具体实现类位于 WindowManagerService中;每个 window原创 2020-07-04 07:53:38 · 734 阅读 · 0 评论 -
Glide 缓存机制解析(为啥使用弱引用)
目前图片框架,基本就是 Glide 一统江山了,除了极其简单的链式调用,里面丰富的 API 也让人爱不释手。那么,这样一个好用的框架,里面的缓存机制是怎么样的呢?我们知道,一般图片框架,加载图片,都是通过内存缓存 LruCache ,DiskLruCache 硬盘缓存中去拿,那 Glide 又是怎么样的呢?这里,我们一起来探讨一下;这里的 Glide 版本为 4.9.0Glide 的缓存可以分为两种,一种内存缓存,一种是硬盘缓存;其中内存缓存又包含 弱引用 和 LruCache ;而硬盘缓存原创 2020-06-30 10:16:34 · 4107 阅读 · 0 评论 -
Android 进程间通信(四) - Messenger 以及源码分析
在上几篇文章中,我们已经学习了Binder 这种通信模式,这章中,我们来学习 Messenger;Messenger可以翻译为信使,它可以在不同进程间传递 Message 对象。Messenger 是一种轻量的 IPC 防范,它的底层实现是 AIDL,后面我们会分析它的源码;一. 实现Messenger通信从上面可以知道,可以传递 Message,一些简单的数据,我们就可以通过这种方式去实现了。下面我们一起来实现它。今天的效果是,客户端发送两个数字,服务端返回两数之和:1.1. 服务端在服务端原创 2020-06-28 14:26:15 · 301 阅读 · 0 评论 -
Android 进程间通信(三) --通过 AIDL 理解Binder,并手写Binder服务
上一章,已经学习了 Binder 的通信原理,这里再通过 AIDL 了,再来捋一遍,并自己写个 Binder。如果你对 AIDL 不熟悉,可以参考这篇文章 AIDL使用详解及进程回调这里也是用上面的代码,首先是任务类 TaskInfo,需要继承 Parcelable 接口,让as 帮你实现方法即可,如下:public class TaskInfo implements Parcelable { public int id; public String url; public原创 2020-06-22 11:03:27 · 1676 阅读 · 0 评论 -
Android 进程间通信(二) -- 理解 Binder 的机制
参考 写给 Android 应用工程师的 Binder 原理剖析 一些文字和图片均参考该文上一章中,已经理解了进程之间通信的一些基本知识,这一章来好好学习 Binder。一、为啥使用Binder我们知道,Android 底层使用了大量的 Binder 来进行进程之间的通信。那为啥要新设计个 Binder ,而不是用传统的IPC 通信方式呢?主要是考虑到以下几个方面:性能方面:Socket 作为通过接口,但传输效率低,开销大,且阻塞 IO,一般用于跨网络的进程间通信;而消息队列和管道,则采用.原创 2020-06-21 20:58:21 · 541 阅读 · 0 评论 -
Android 换肤原理分析
当了解了一些知识,应该用文字记录它,再抽个时间再看它,永远记住它Android 换肤的理论知识和文章已经很多了,这里记录一下自己对这块的理解。本文效果如下:工程:一键换肤的快乐一、换肤的由来首先,为什么要换肤呢?那肯定是一套UI不满足需求,无法面对多变的需求,从而需要有可以自由去更换UI 的手段,而这也是换肤想要达到的目的。比如,一个imageview , 现在设置了一张图片,但是 618 来了, 我先更换成新的图片,怎么办?总不能让用户再更新一遍吧,虽然可以增量更新,但总不能每次都直接更新.原创 2020-06-20 08:54:14 · 4842 阅读 · 1 评论 -
Android 线程池解析与复用原理
作为面试的常住嘉宾之一,线程池的拷问,估计每个面试官都想问一遍。下面,我们一起来学习一下。一、线程池首先,提到线程池就得说说它的好处,总得来说,可以分为以下三点:复用线程池的线程,避免线程创建和销毁带来的性能开销。控制线程池的最大并发数,避免大量线程之间抢占系统资源而导致的阻塞现象能够对线程进行简单的管理,并提供定时执行以及制定间隔循环执行等任务但需要注意的一点,如果只有一个线程,且不需要复用,则不需要用到线程池,没必要。我们都知道,Java的线程池共有4中,newFixedThread原创 2020-06-18 17:22:22 · 1105 阅读 · 1 评论