Android进阶
文章平均质量分 92
刘望舒
腾讯最具价值专家,Android进阶书畅销前三: 《Android进阶指北》《Android进阶解密》《Android进阶之光》 作者 ,连续5年蝉联电子工业出版社年度优秀作者。国内首批Android开发者,10多年开发经验,前华为架构师、独角兽公司技术总监。国内唯一被百度百科收录的Android技术专家,谷歌开发者社区、Droidcon等技术大会特邀讲师,CSDN 2018年度十大博客之星。
展开
-
Android内存优化(五)详解内存分析工具MAT
在这个系列的前四篇文章中,我分别介绍了DVM、ART、内存泄漏和内存检测工具的相关知识点,这一篇我们通过一个小例子,来学习如何使用内存分析工具MAT。原创 2017-08-11 00:30:45 · 22425 阅读 · 2 评论 -
Android解析ActivityManagerService(一)AMS启动流程和AMS家族
此前在Android系统启动流程、应用进程以及深入四大组件这三个系列文章中,都提及到了AMS,但都没有系统的来讲解它,本文就以AMS为主来进行讲解,其中会有一些知识点与这些系列文章有所重合,这里会尽量做到详尽讲解。阅读此文章前,最好阅读相关文章中列出的系列文章,否则我不敢保证这篇文章你能看的懂。原创 2017-07-31 00:09:44 · 22374 阅读 · 3 评论 -
Android解析ActivityManagerService(二)ActivityTask和Activity栈管理
关于AMS,原计划是只写一篇文章来介绍,但是AMS功能繁多,一篇文章的篇幅远远不够。这一篇我们接着来学习与AMS相关的ActivityTask和Activity栈管理。原创 2017-08-25 00:09:55 · 10327 阅读 · 7 评论 -
Android内存优化(六)LeakCanary使用详解
如果使用MAT来分析内存问题,会有一些难度,并且效率也不是很高,对于一个内存泄漏问题,可能要进行多次排查和对比。为了能够简单迅速的发现内存泄漏,Square公司基于MAT开源了LeakCanary。原创 2017-09-04 00:13:54 · 48051 阅读 · 7 评论 -
Android解析WindowManager(一)WindowManager体系
WindowManagerService(WMS)和AMS一样,都是Android开发需要掌握的知识点,同样的,WMS也很复杂,需要多篇文章来进行讲解,为何更好的理解WMS,首先要了解WindowManager,这一篇我们来学习WindowManager体系。原创 2017-09-08 00:36:23 · 8030 阅读 · 5 评论 -
Android解析WindowManager(三)Window的添加过程
在此前的系列文章中我们学习了WindowManager体系和Window的属性,这一篇我们接着来讲Window的添加过程。建议阅读此篇文章前先阅读本系列的前两篇文章。原创 2017-09-19 00:39:06 · 5995 阅读 · 4 评论 -
Android解析WindowManager(二)Window的属性
在上一篇文章我们学习了WindowManager体系,了解了Window和WindowManager之间的关系,这一篇我们接着来学习Window的属性。原创 2017-09-12 00:13:15 · 7117 阅读 · 6 评论 -
Android解析ClassLoader(一)Java中的ClassLoader
热修复和插件化是目前比较热门的技术,要想更好的掌握它们需要了解ClassLoader,因此也就有了本系列的产生,这一篇我们先来学习Java中的ClassLoader。原创 2017-09-25 19:42:50 · 11703 阅读 · 12 评论 -
Android解析WindowManagerService(一)WMS的诞生
此前我用多篇文章介绍了WindowManager,这个系列我们来介绍WindowManager的管理者WMS,首先我们先来学习WMS是如何产生的。本文源码基于Android 8.0,与Android 7.1.2相比有一个比较直观的变化就是Java FrameWork采用了Lambda表达式。原创 2017-10-09 21:03:55 · 15014 阅读 · 3 评论 -
Android解析ClassLoader(二)Android中的ClassLoader
相关文章 Java虚拟机系列 Android系统启动系列 Android解析ClassLoader系列前言在上一篇文章我们学习了Java的ClassLoader,很多同学会把Java和Android的ClassLoader搞混,甚至会认为Android中的ClassLoader和Java中的ClassLoader是一样的,这显然是不对的。这一篇文章我们就来学习Android中的C...原创 2017-10-18 19:45:14 · 14195 阅读 · 6 评论 -
Android解析WindowManagerService(二)WMS的重要成员和Window的添加过程
在本系列的上一篇文章中,我们学习了WMS的诞生,WMS被创建后,它的重要的成员有哪些?Window添加过程的WMS部分做了什么呢?这篇文章会给你解答。原创 2017-10-26 18:55:54 · 5986 阅读 · 2 评论 -
Android深入四大组件(六)Android8.0 根Activity启动过程(前篇)
当我开始阅读Android 8.0源码时发现应用程序(根Activity)启动过程照Android 7.0有了一些变化,因此又写下了本篇文章,本篇文章照此前的文章不仅流程发生变化,而且增加了一些分析,算是升级版本。由于篇幅较长,Android8.0 根Activity启动过程仍旧分为前篇和后篇来进行讲解。原创 2017-11-18 16:56:40 · 4504 阅读 · 0 评论 -
Android网络编程(六)OkHttp3用法全解析
上一篇介绍了OkHttp2.x的用法,这一篇文章我们来对照OkHttp2.x版本来看看,OkHttp3使用起来有那些变化。当然,看这篇文章前建议看一下前一篇文章Android网络编程(五)OkHttp2.x用法全解析。原创 2016-04-21 12:26:19 · 131042 阅读 · 52 评论 -
Android事件总线(一)EventBus3.0用法全解析
EventBus是一款针对Android优化的发布/订阅事件总线。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小,代码更优雅,以及将发送者和接收者解耦。如果Activity和Activity进行交互还好说,如果Fragment和Fragment进行交互着实令人头疼,我们会使用广播来处理,但是使用广播稍显麻烦并且效率也不高,如果传递的数据是实体类需要序列化,那么很显然成本会有点高。今天我们就来学习下Ev原创 2016-08-17 10:21:59 · 62033 阅读 · 25 评论 -
Android网络编程(一)HTTP协议原理
这篇文章是这个系列的开篇,作为移动开发者,开发的应用不免会对网络进行访问,虽然现在已经有很多的开源库帮助我们可以轻而易举的访问网络,但是我们仍要去了解网络访问的原理,这也是一个优秀开发人员所必备的知识点。这篇文章我们就先来了解一下HTTP协议原理。原创 2016-03-28 11:38:35 · 58450 阅读 · 17 评论 -
Android系统架构与系统源码目录
技术博客终于可以恢复正常的更新速度了,原因是我编写的进阶书籍的初稿已经完成,窃以为它将会是Android应用书籍中最有深度的一本,可以说是《Android开发艺术探索》的姊妹篇。在这本书的最后一章我会分析Android底层源码,但是毕竟是一本Android应用开发的书,对于底层源码阅读也只能带大家入个门。因此,在博客中我会新开一个“系统源码解析”的系列,该系列的开篇就是本篇文章。原创 2017-01-23 18:09:56 · 73191 阅读 · 27 评论 -
Android系统启动流程(一)解析init进程启动过程
作为“Android框架层”这个大系列中的第一个系列,我们首先要了解的是Android系统启动流程,在这个流程中会涉及到很多重要的知识点,这个系列我们就来一一讲解它们,这一篇我们就来学习init进程。原创 2017-02-07 11:29:48 · 41008 阅读 · 7 评论 -
Android View体系(二)实现View滑动的六种方法
View的滑动是Android实现自定义控件的基础,同时在开发中我们也难免会遇到View的滑动的处理。其实不管是那种滑动的方式基本思想都是类似的:当触摸事件传到View时,系统记下触摸点的坐标,手指移动时系统记下移动后的触摸的坐标并算出偏移量,并通过偏移量来修改View的坐标。原创 2016-02-28 17:19:31 · 21767 阅读 · 11 评论 -
Android深入四大组件(七)Android8.0 根Activity启动过程(后篇)
当我开始阅读Android 8.0源码时发现应用程序(根Activity)启动过程照Android 7.0有了一些变化,因此又写下了本篇文章,本篇文章照此前的文章不仅流程发生变化,而且增加了一些分析,算是升级版本。由于篇幅较长,Android8.0 根Activity启动过程仍旧分为前篇和后篇来进行讲解。原创 2017-12-18 12:17:36 · 1948 阅读 · 0 评论 -
Android解析WindowManagerService(三)Window的删除过程
相关文章 Android系统启动系列 Android深入四大组件系列 Android应用进程启动过程系列 Android解析WindowManager系列前言在本系列文章中,我提到过:Window的操作分为两大部分,一部分是WindowManager处理部分,另一部分是WMS处理部分,Window的删除过程也不例外,本篇文章会介绍Window的删除过程,包括了两大处理部分的内容原创 2018-01-22 22:36:09 · 3139 阅读 · 0 评论 -
Android热修复原理(一)热修复框架对比和代码修复
相关文章 解析ClassLoader系列前言在Android应用开发中,热修复技术被越来越多的开发者所使用,也出现了很多热修复框架,比如:AndFix、Tinker、Dexposed和Nuwa等等。如果只是会这些热修复框架的使用那意义并不大,我们还需要了解它们的原理,这样不管热修复框架如何变化,只要基本原理不变,我们就可以很快的掌握它们。这一个系列不会对某些热修复框架源码进行解析,...原创 2018-03-12 01:20:29 · 50577 阅读 · 9 评论 -
Android插件化原理(一)Activity插件化
相关文章Android深入四大组件系列 Android解析AMS系列 Android解析ClassLoader系列前言四大组件的插件化是插件化技术的核心知识点,而Activity插件化更是重中之重,Activity插件化主要有三种实现方式,分别是反射实现、接口实现和Hook技术实现。反射实现会对性能有所影响,主流的插件化框架没有采用此方式,关于接口实现可以阅读dynamic-l...原创 2018-06-04 22:45:38 · 14259 阅读 · 4 评论 -
Android包管理机制(一) PackageInstaller的初始化
前言包管理机制是Android中的重要机制,是应用开发和系统开发需要掌握的知识点之一。 包指的是Apk、jar和so文件等等,它们被加载到Android内存中,由一个包转变成可执行的代码,这就需要一个机制来进行包的加载、解析、管理等操作,这就是包管理机制。包管理机制由许多类一起组成,其中核心为PackageManagerService(PMS),它负责对包进行管理,如果直接讲PMS会比较难以...原创 2018-06-19 16:45:46 · 5805 阅读 · 3 评论 -
Android包管理机制(二)PackageInstaller安装APK
前言在本系列上一篇文章Android包管理机制(一)PackageInstaller的初始化中我们学习了PackageInstaller是如何初始化的,这一篇文章我们接着学习PackageInstaller是如何安装APK的。本系列文章的源码基于Android8.0。 1.PackageInstaller中的处理紧接着上一篇的内容,在PackageInstallerActivit...原创 2018-07-13 01:35:05 · 17562 阅读 · 0 评论 -
Android包管理机制(三)PMS处理APK的安装
相关文章 Android包管理机制系列前言在上一篇文章Android包管理机制(二)PackageInstaller安装APK中,我们学习了PackageInstaller是如何安装APK的,最后会将APK的信息交由PMS处理。那么PMS是如何处理的呢?这篇文章会给你答案。 1.PackageHandler处理安装消息APK的信息交由PMS后,PMS通过向PackageHa...原创 2018-07-31 21:33:18 · 3374 阅读 · 0 评论 -
Android包管理机制(四)PMS的创建过程
相关文章 Android包管理机制系列前言PMS的创建过程分为两个部分进行讲解,分别是SyetemServer处理部分和PMS构造方法。其中SyetemServer处理部分和AMS和WMS的创建过程是类似的,可以将它们进行对比,这样可以更好的理解和记忆这一知识点。 1. SyetemServer处理部分PMS是在SyetemServer进程中被创建的,SyetemServe...原创 2018-08-21 13:43:24 · 1763 阅读 · 0 评论 -
Gradle核心思想(一)为什么现在要用Gradle?
前言又要开启一个新系列了,这个系列我们来学习Gradle,它是一个基于JVM的新一代构建工具,关于Gradle完全可以写一本书,这个系列会针对Android开发来对Gradle的知识进行精简讲解。Gradle目前已经应用于多个Android开发的技术体系中,比如构建系统、插件化、热修复和组件化等等,如果你不了解Gradle,那么你对于上述技术体系的了解会大打折扣。为了让大家能够更好的学习Gra...原创 2018-08-21 13:45:17 · 4465 阅读 · 1 评论 -
Gradle核心思想(二)Gradle入门前奏
前言在上一篇文章Android Gradle(一)为什么现在要用Gradle?中,我们学习了常见的构建工具,以及Gradle与这些构建工具相比有那些不同的特性。这一篇文章我们接着来学习Gradle入门需要掌握的知识,包括配置环境、实现Hello World、Gradle的任务、Gradle日志和Gradle命令行,掌握这些能够更好的理解Gradle。1.配置Gradle环境安装Gradle...原创 2018-10-04 17:44:51 · 1941 阅读 · 0 评论 -
寒冬已至?四面楚歌的Android工程师该何去何从
本文首发于 刘望舒的博客地址:http://liuwangshu.cn/life/android-wheretogo.html寒冬真的来了吗?可能是吧,因为最近几年每年都说是寒冬,说的真的叫人焦虑。不过互联网的整体环境确实不如前几年,即使不说我想大家也能隐约的感受到了。作为曾经炙手可热的Android工程师,现在面临着以下的问题:互联网整体环境不乐观Android开发人员众多但岗位...原创 2018-11-06 21:01:14 · 21552 阅读 · 46 评论 -
Gradle核心思想(三)Groovy快速入门指南
关联系列Android Gradle系列前言在前面我们学习了为什么现在要用Gradle?和Gradle入门前奏两篇文章,对Gradle也有了大概的了解,这篇文章我们接着来学习Groovy的基础,要想学好Gradle,Groovy是必须要掌握的。Groovy仅凭一篇文章是介绍不完的,这里会带大家快速的入门Groovy,讲解Groovy和Java不同的部分,想要更多了解Groovy可以查看Gro...原创 2018-11-20 23:02:22 · 2518 阅读 · 1 评论 -
Android包管理机制(五)APK是如何被解析的
关联系列包管理机制系列前言在本系列的前面文章中,我介绍了PackageInstaller的初始化和安装APK过程、PMS处理APK的安装和PMS的创建过程,这些文章中经常会涉及到一个类,那就是PackageParser,它用来在APK的安装过程中解析APK,那么APK是如何被解析的呢?这篇文章会给你答案。1.引入PackageParserAndroid世界中有很多包,比如应用程序的AP...原创 2018-11-20 23:03:48 · 4416 阅读 · 4 评论 -
Android输入系统(一)输入事件传递流程和InputManagerService的诞生
关联系列解析WMS系列View体系系列前言很多同学可能会认为输入系统是不是和View的事件分发有些关联,确实是有些关联,只不过View事件分发只能算是输入系统事件传递的一部分。这个系列讲的输入系统主要是我们不常接触的,但还是需要去了解的那部分。1. 输入事件传递流程的组成部分输入系统是外界与Android设备交互的基础,仅凭输入系统是无法完成输入事件传递的,因此需要输入系统和Andro...原创 2018-12-07 17:56:01 · 2256 阅读 · 1 评论 -
Android输入系统(二)IMS的启动过程和输入事件的处理
关联系列解析WMS系列深入理解JNI系列输入系统系列基于Android 8.1前言在上一篇文章中,我们学习了IMS的诞生(创建),IMS创建后还会进行启动,这篇文章我们来学习IMS的启动过程和输入事件的处理。1.IMS的启动过程IMS的创建在SystemServer的startOtherServices方法中,不了解请查看Android输入系统(一)输入事件传递流程和InputM...原创 2019-02-07 15:23:23 · 1618 阅读 · 1 评论 -
Android输入系统(三)InputReader的加工类型和InputDispatcher的分发过程
关联系列解析WMS系列深入理解JNI系列输入系统系列前言在上一篇文章中,我们学习了输入事件的处理,输入事件会交由InputDispatcher进行分发,那么InputDispatcher是如何进行分发的?这篇文章会给你答案。1.InputReader的加工类型在Android输入系统(二)IMS的启动过程和输入事件的处理这篇文章中,我们知道InputReader会对原始输入事件进行...原创 2019-03-14 21:42:12 · 1174 阅读 · 0 评论 -
Gradle核心思想(四)看似无用,实则重要的Gradle Wrapper
关联文章Gradle核心思想(一)为什么现在要用Gradle?Gradle核心思想(二)Gradle入门前奏Gradle核心思想(三)Groovy快速入门指南Gradle核心思想(四)看似无用,实则重要的Gradle WrapperGradle核心思想(五)通俗易懂的Gradle插件讲解前言在本系列的此前文章中,我们学习了为什么要用Gradle、Gradle的入门基础和Groovy...原创 2019-04-05 01:04:06 · 725 阅读 · 0 评论 -
Gradle核心思想(五)通俗易懂的Gradle插件讲解
关联文章Gradle核心思想(一)为什么现在要用Gradle?Gradle核心思想(二)Gradle入门前奏Gradle核心思想(三)Groovy快速入门指南Gradle核心思想(四)看似无用,实则重要的Gradle WrapperGradle核心思想(五)通俗易懂的Gradle插件讲解前言在本系列的前作中,我们学习了为什么要用Gradle、Gradle的入门基础和Groovy的基...原创 2019-04-05 01:13:54 · 803 阅读 · 0 评论 -
Gradle核心思想(六)自定义Gradle插件的三种方式
相关文章Gradle核心思想(一)为什么现在要用Gradle?Gradle核心思想(二)Gradle入门前奏Gradle核心思想(三)Groovy快速入门指南Gradle核心思想(四)看似无用,实则重要的Gradle WrapperGradle核心思想(五)通俗易懂的Gradle插件讲解前言在上一篇文章Gradle核心思想(五)通俗易懂的Gradle插件讲解中,我介绍了什么是Gra...原创 2019-04-05 01:16:30 · 1504 阅读 · 0 评论 -
Android AOSP基础(一)VirtualBox 安装 Ubuntu
前言在Android进阶三部曲第二部《Android进阶解密》的第一章,我介绍了两种阅读源码的方式,其中一种是从百度网盘:https://pan.baidu.com/s/1ngsZs 将源码下载下来,然后用SouceInsight来查看,这种方式很便捷,适合去阅读源码,但是有两个弊端,一个是无法获取最新的源码,另一个是不能够编译源码。本系列就是来讲解下载和编译源码相关知识的。编译源码需要在 Li...原创 2019-04-05 01:19:26 · 1261 阅读 · 0 评论 -
Android AOSP基础(二)AOSP源码下载
前言这篇文章我们来学习如何下载AOSP 源码,如果你还没有Linux 环境,请查看Android AOSP基础(一)VirtualBox 安装 Ubuntu这篇文章,另外如果你不需要编译源码,或者不需要最新的源码,可以直接从百度网盘:https://pan.baidu.com/s/1ngsZs 将源码下载下来。1.关于AOSPAOSP(Android Open Source Project...原创 2019-04-05 01:21:19 · 3571 阅读 · 0 评论 -
Android AOSP基础(三)Android系统源码的整编和单编
关联系列Android AOSP基础系列Android系统启动系列前言在上一篇文章Android AOSP基础(二)AOSP 源码下载中,我们顺利的将AOSP下载了下来,很多时候我们不仅仅需要去查看源码,还有以下的几个需求:动态调试Android系统源码定制Android系统将最新版本的Android系统刷入到自己的Android设备中将系统源码导入到Android Stud...原创 2019-04-05 01:26:39 · 5801 阅读 · 0 评论