源码解析系列
文章平均质量分 80
本系列将会详细讲解系统源码,有兴趣的朋友可以参考学习一下。
珠穆朗玛小王子
又是一个新的开始
展开
-
Handler的removeCallbacksAndMessages怎么不好使了呢?
前言此篇文章记录日常遇到的一个小坑:Handler的removeCallbacksAndMessages没生效。正文需求:需求:有1-5个超时任务,如果某个任务在规定时间内完成,需要取消对应的超时任务;这个需求并不复杂,如果是比较简单的延时任务,可以使用Handler.postDelayed添加延时任务,如果任务在预期内完成,可以通过Handler.removeCallbacksAndMessages删除掉对应的任务:Handler handler = new Handler();// 添原创 2022-05-25 16:11:17 · 1638 阅读 · 0 评论 -
Java泛型与Kotlin泛型
正文本文主要列举Java泛型与Kotlin泛型的基本知识,以及两者的区别。什么泛型泛型程序设计是程序设计的一种风格或或规范。简单的说就是该类型可变,在编写代码时可以根据情况设置不同的类型。因为泛型的可变性,很容易出现类型转换异常,Java与Kotlin在编译期间提供了泛型检测,帮助开发者在编译期间就能尽量避免此异常的出现。Java泛型的基本知识Java泛型主要用在类,接口,类方法。泛型仅在编译期间有效,编译完成后擦除泛型标记。// 类class ObjectA<T>{}// 接口原创 2021-04-08 18:17:56 · 779 阅读 · 0 评论 -
源码解析:Application的创建过程(android 11)
前言此文仅分析Applcation的创建过程。正文如果我们要启动App,系统会创建ZygoteInit进程启动整个应用,其中ZygoteInit.main是整个应用启动的入口,在main方法中,我们需要fork一份系统服务: if (startSystemServer) { Runnable r = forkSystemServer(abiList, zygoteSocketName, zygoteServer); // {@code r == null} in th原创 2020-11-12 18:42:17 · 434 阅读 · 0 评论 -
Handler中loop方法为什么不会导致线程卡死
前言最近闲的时间比较多,浏览一些公众号和一些IT网站,突然看到一个问题:Handler中loop方法为什么不会导致线程卡死?我先浏览了一下源码,以下为截取部分片段:/**Looper*/public static void loop() { ... for (;;) { Message msg = queue.next(); // might block if (msg == null) {原创 2020-08-03 12:15:25 · 975 阅读 · 0 评论 -
LifeCycle在Fragment中的使用
前言今天在浏览技术大牛的公众号文章,看到一篇文章讲解了如果LifeCycle实现懒加载的新思路,经过学习和总结写一篇播放博客分享给大家。原文作者博客:https://juejin.im/post/5e085dafe51d45580769a1eb(此文章已授权鸿洋公众号)再为大家推荐两位大牛的公众号,对于处于突破拔高期的朋友非常有帮助:1、鸿洋大牛也是CSDN的知名博主:https://m...原创 2020-03-02 19:26:40 · 4532 阅读 · 0 评论 -
线性布局和相对布局的实现原理
前言对于中高级的工程师来说,有一定的阅读源码的经验已经必备技能之一了,尤其是 LinearLayout 和 RelativeLayout,我们先准备一下要掌握的知识点:LinearLayout 的 Weight 是如何实现的?LinearLayout 的 Weight 对于测量过程增加了哪些实现成本?LinearLayout 的 Weight 真的会导致需要测量两次吗?Relative...原创 2020-01-13 12:05:03 · 777 阅读 · 0 评论 -
序列化原理(一):从源码理解Serializable
前言就在昨天和同事聊天聊起了序列化,我们熟知并且使用最方便的就是Serializable。那么为什么要序列化呢?有些朋友会说:序列化主要是为了数据持久化。我们都知道Serializable是一个空接口,不需要我们实现任何的方法,设置可以不设置serialVersionUID,那他存在的意义是什么呢,直接让所有的类都可以序列化不是更简单吗,带着这样的思考,我开始研究Serializable的...原创 2019-05-09 18:01:23 · 3506 阅读 · 1 评论 -
序列化原理(二):从源码理解Parcelable
前言上一篇我们研究了一下Serializable,虽然它使用方便,但是效率和兼容性上确实还存在一些问题。为此Android提供了特有的Parcelable机制,按照官方说法,速度是Serializable的十倍左右。正文public class TestBean implements Parcelable { private int x; private int y;...原创 2019-05-28 15:21:32 · 624 阅读 · 0 评论 -
Java、Android工程师必备知识(一):哈西算法的初步了解
前言在之前去新浪面试的时候,一开始问的都是Android问题,都没有什么压力,大公司不会去上来故意问一些蛋疼的问题,重点考察基础,然后再问一些思维有关的问题。最后说想看看我的java基础,然后问了一个问题:你了解哈西算法吗?Java为什么要使用哈西算法?很明显,我是栽在这个问题上了,如果说Java的Api的话,估计大部分的Android开发者都能说出一二,但是设计思想的话,我确实不太了解,所以就有了原创 2017-06-29 16:35:22 · 1933 阅读 · 1 评论 -
Java、Android工程师必备知识(二):hashCode()方法的作用
前言今天掐指一算,果然是一个写博客的良辰吉日,所以早上来就开始准备,之前我们聊了聊哈西算法的优点和好处,并且意识到如果没有哈西表,在我们庞大的内存里面查询一个对象,是有多么的蛋疼。例如我们常用的HashMap,把一些不在连续的内存空间的对象放在一起,这个时候你再去想遍历,那不是要蛋疼的飞起?,所以今天我们先来看看hashCode方法。正文再次回忆起Java老师曾经跟我们说的话:如果要判断两个对象相等原创 2017-07-05 14:48:54 · 4917 阅读 · 1 评论 -
Java、Android工程师必备知识(三):hashMap的实现原理
前言通过前面的两篇我们已经充分了解了什么是哈西算法,以及哈西表对于Java的重要性,今天就实际了解一下HashMap的实现原理,作为最后的实战总结。顺便强调一句,我这个是android7.0,JDK为1.8,不同版本源码可能不同。正文HashMap是我们最常用的类之一,通过键值对保存一些重要的信息,而且提取速度快,针对性强。例如下面的代码:HashMap<StringD, Student> map原创 2017-07-06 13:42:18 · 753 阅读 · 0 评论 -
AIDL使用学习(一):基础使用学习
前言使用aidl已经很长时间了,在实际应用中主要是新建进程来做些可能占用内存很高的操作,不仅可以降低主进程的内存占用,而且服务进程崩溃不会影响主进程的运行,确实非常实用。这一篇主要讲讲aidl的基础用法。正文AIDL:Android Interface Definition Language,即Android接口定义语言。基础概念就不多说了,AIDL主要是提供了跨进程通信机制,android的底层通原创 2017-04-25 14:46:01 · 818 阅读 · 0 评论 -
AIDL使用学习(二):跨进程回调以及RemoteCallbackList
前言五一假期终于结束了,回来一直也是在面试,今天先把之前的AIDL的内容讲完,再整理一下面试总结。正文上一篇我们已经了解了AIDL的基本使用方法,一般服务内都是要做耗时操作的,等处理结束之后在回调给调用方,首先我们需要定义一个callback:// IOnCallbackListener.aidlpackage com.lzp.aidlstudy.callback;interface IOnCal原创 2017-05-06 15:43:48 · 8314 阅读 · 2 评论 -
AIDL使用学习(三):源码深入分析
前言我们都已经学习并掌握了AIDl的用法,这一篇我们仔细的看看aidl文件生成的java文件以及具体的工作流程,来加深对AIDL的理解。正文首先我们就看看绑定服务的流程,MainActivity中绑定服务:private ITestInterface binder;private ServiceConnection connection = new ServiceConnection() {原创 2017-05-06 17:13:18 · 516 阅读 · 0 评论