android 进阶
文章平均质量分 92
renxhui
android 开发工程师
展开
-
Android 状态机源码解析
概述如果流程围绕失误的状态流转,这时候就要用到状态机,状态机描述一个事务,有多种状态,不同的动作作用再状态上导致抓状态的转换,这里面有三个重点状态 : 睡觉,工作,吃饭事件 : 起床,饥饿,疲惫动作 : 比如说闹铃触发了起床事件导致状态 从睡觉->工作(可以省略)总体就是,首先触发某个事件,导致了状态的改变, 闹铃触发起床事件,导致状态的改变睡觉-->工作而Android中提供了状态机,在frameworks层源码frameworks/base/core/java/com/and原创 2021-08-13 14:18:21 · 313 阅读 · 0 评论 -
Android 插件化原理及实践
概述插件化是一个非常大的话题,他包含很多的知识点,我们今天简单的学习一下他的原理,并且从零开始实现插件化,这里主要用到了Hook技术关联文章Android APK资源加载流程Android 中的ClassLoaderAndroid App启动过程Android 热修复原理实战设计模式 – 代理模式插件化需要解决的问题和技术Hook技术插件的类加载插件的资源加载启动插件Ac...原创 2019-12-20 10:12:18 · 355 阅读 · 0 评论 -
Android 热修复原理实战
概述关联文章JVM 类加载机制Android 中的ClassLoaderAndroid APK资源加载流程Android 热修复原理解析纸上得来终觉浅,绝知此事要躬行,读了这么多源码是时候实践一下了代码修复首先我们定义一个简单的类public class Text { public static String message(){ return "明天不放...原创 2019-12-16 11:02:25 · 351 阅读 · 0 评论 -
Android APK资源加载流程
概述我们在Activity中访问资源(图片,字符串,颜色等)是非常方便的,只需要getResources()获取一个Resources对象,然后就可以访问各种资源了,那这些资源到底是怎么被加载的呢?下面我们就分析一下资源加载机制App启动流程首先我们回顾一下App启动流程,还不了解的可以看我之前写的这篇文章首先是点击App图标,此时是运行在Launcher进程,通过ActivityMan...原创 2019-12-10 16:39:16 · 903 阅读 · 0 评论 -
Android 热修复原理解析
概述关联文章JVM 类加载机制Android 中的ClassLoader假如刚发布的版本出现了bug,我们就需要解决bug,并且重新发布新的版本,这样会浪费很多的人力物力,有没有一种可以不重新发布App,不需要用户覆盖安装,就可以解决bug。热修复就是为了解决上方的问题出现的,热修复主要分为三种修复,分别是代码修复资源修复动态链接库的修复(so修复)我们一次说一下他们的原理...原创 2019-11-29 17:08:43 · 238 阅读 · 0 评论 -
Android 中的ClassLoader
概述上一篇文章我们了解了Java的ClassLoader,上一篇文章传送门JVM 类加载机制其实Android中的ClassLoader和java中的是不一样的,因为java中的CalssLoader主要加载Class文件,但是Android中的ClassLoader主要加载dex文件Android中的ClassLoaderAndroid中的ClassLoader分为俩种类型,系统类加载器...原创 2019-11-28 15:58:57 · 361 阅读 · 0 评论 -
Android 理解Window和WindowManager
概述Window表示窗口的概念,他是一个抽象类,他的真正实现类是PhoneWindow,WindowManager用来对Window进行管理,是外接访问Window的入口,Window操作的具体实现是在WindowManagerService中,WindowMager和WindowManagerService交互是IPC的过程Android中所有的视图都是附加在Window上上呈现的,不管Ac...原创 2019-11-15 15:25:21 · 645 阅读 · 0 评论 -
Android ContentProvider启动流程
概述ContentProvider的启动其实是在App启动时就自动启动的,还不知道APP启动流程的,推荐看一下Android App启动过程,我们知道当一个App启动时,经历了以下步骤首先是点击App图标,此时是运行在Launcher进程,通过ActivityManagerServiceBinder IPC的形式向system_server进程发起startActivity的请求syste...原创 2019-11-12 10:55:53 · 1231 阅读 · 0 评论 -
Android 广播启动流程
概述我们从三个方面来分析广播的流程广播的注册广播的发送广播的处理广播的注册广播的注册分为静态注册和动态注册,我们主要分析动态注册首先我们从context.registerReceiver()这个方法开始,看他内部调用了ContextWrapper#registerReceiver方法ContextWrapper.java @Override public Inten...原创 2019-11-08 17:17:07 · 747 阅读 · 0 评论 -
Android Service 启动流程
概述Service启动流程和Activity启动流程有些相似,不了解Activity启动流程的可以看我之前的一篇博客Android App启动过程Start Service 流程Context.startService()首先我们先从 context.startService()这个方法为起点进行分析,我们看下他的源码## ContextWrapper.javapublic class...原创 2019-11-07 15:55:28 · 290 阅读 · 0 评论 -
Android OkHttp源码解析
使用这里不详细讲解如何使用,如果需要详细了解使用,请参考我的另一篇文章Android OkHttp3.0 基本使用我们看一下基本使用 HttpLoggingInterceptor logInterceptor = new HttpLoggingInterceptor(new HttpLogger()); logInterceptor.setLevel(HttpLogging...原创 2019-09-26 16:37:03 · 244 阅读 · 0 评论 -
Android Handler 源码解析
概述Handler主要用于线程间的通信,Handler主要是由MessageQueue,Message,Looper,Handler,共同组成,称为Handler消息机制,存储Looper使用了ThreadLocal,下面我们一次讲解这几个类Handler主要负责发送消息,和处理消息MessageQueue主要负责储存消息Looper主要负责从MessageQueue中取出消息,然后分发...原创 2019-09-17 16:00:57 · 245 阅读 · 0 评论 -
Android App的启动流程
概述当你点击桌面App的图标到底发生了什么,上篇文章我们大概简述了流程App发起进程:如果从桌面启动应用,则发起进程便是Launcher所在的进程,当从某App启动远程进程,则发起进程是App所在的进程,发起进程首先需要通过Binder发送信息给system_server进程system_server进程:调用Process.start方法,通过Socket向Zygote进程发送新建进程的...原创 2019-09-09 10:20:37 · 586 阅读 · 0 评论 -
Android 系统启动流程
概述站在巨人的肩膀上学习,本片博客参考gityuan,用于笔记和巩固知识Android 架构这个是Google官方提供的经典的分层架构图,从下向上依次是,Linux内核,HAL,系统Native库和Android Runtime,Java框架层,应用层,其中每一层都有若干的子模块和子系统Google提供的5层很经典,但是为了更进一步的透视Android 系统架构,以进程的视角,以分层的...原创 2019-08-29 17:10:57 · 436 阅读 · 0 评论 -
Android APT实践 实现Butterknife
APT详解现在越来越多的三方库运用了APT技术,如:Dagger2、ButterKnife、ARouter等,在编译时根据annotation生成相关的代码逻辑,动态生成java,class文件给开发带来了很大的便利APT的含义APT 的全称为:Annotation Processing Tool 可以解释为注解处理器,它对源代码文件进行检测找出其中的Annotation,使用指定的Ann...原创 2019-07-04 15:43:55 · 675 阅读 · 0 评论 -
Android IPC系列(二):AIDL源码分析
Android 中如何开启多进程这里说一下一个应用开启多个进程的情况,不讨论多个应用多进程,Android开启多进程只有一种方法,在AndroidManifest文件中给四大组件指定 android:process属性,其实还有一种非常规的方法通过JNI在native层fork一个进程,这种属于特殊情况 <activity android:name=".MainActivity"&g...原创 2019-07-25 15:45:54 · 373 阅读 · 0 评论 -
Android View系列(二):事件分发机制源码解析
## 概述在介绍点击事件规则之前,我们需要知道我们分析的是MotionEvent,即点击事件,所谓的事件分发就是对MotionEvent事件的分发过程,即当一个MotionEvent生成以后,系统需要把这个事件传递给具体的View,而这个传递过程就是分发过程,MotionEvent我们上节已经介绍过事件分发主要涉及以下几个方法:原创 2019-07-30 17:07:55 · 381 阅读 · 0 评论 -
Android IPC系列(三):Binder概述
背景知识为了更好的理解binder,我们要先澄清一下概念,因为Android 基于Linux内核,我们有必要了解相关知识。进程隔离进程隔离是为了保护操作系统进程之间互不干扰而设计的,这个技术是为了避免进程A写入进程B准备的,进程隔离的实现,使用了虚拟地址空间,进程A的虚拟地址和进程B的虚拟地址不同,这样就防止进程A的数据写入进程B,操作系统之间不同进程之间,数据不共享,对于每一个进程来说,都...原创 2019-07-26 10:41:01 · 236 阅读 · 0 评论 -
Android View系列(三):View的绘制流程
ViewRoot和DecorViewViewRoot对应于ViewRootImpl类,他是链接WindowManager和DecorView的纽带,View的三大流程都是通过ViewRoot来完成的,在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewRootImpl和DecorVi...原创 2019-08-06 16:20:35 · 316 阅读 · 0 评论 -
Android 性能优化系列(一):内存优化
分配内存的时候发生了什么当你new 一个对象的时候,到底发生了什么首先会为你的对象分配内存,如果成功就成功,如果失败就进行下一步下一步:进行GC,注意这次GC不包括软引用,然后分配内存,如果成功就成功了,如果失败,就进行下一步下一步:增大Heap堆内存,每个应用都是有一个最大的堆内存空间,但是不是一开始就给你最大,是慢慢给的,然后分配内存,如果成功就成功,如果失败,就进行下一步下一步:...原创 2019-08-19 15:49:29 · 177 阅读 · 0 评论 -
Android LeakCanary的使用和原理
LeakCanary介绍LeakCanary提供了一种很方便的方式,让我们在开发阶段测试内存泄露,我们不需要自己根据内存块来分析内存泄露的原因,我们只需要在项目中集成他,然后他就会帮我们检测内存泄露,并给出内存泄露的引用链集成在gradle中添加依赖 implementation 'com.squareup.leakcanary:leakcanary-android:1.5.1'...原创 2019-08-22 16:25:07 · 2872 阅读 · 0 评论 -
Android 架构:MVP实践
概念MVP分三层 M:Model包含具体的数据请求数据源,主要负责 1 :从网络,数据库,文件,传感器,等第三放数据源读取数据 2 :对外部数据类型进行解析,转换为app内部数据 3 : 对数据的临时储存,管理,协调上层数据请求V View主要负责处理UI,不包含页面逻辑,对应Activity和Fragment 1 :提供UI交互 2 :在presenter控制下修改UI 3...原创 2018-08-08 14:23:27 · 431 阅读 · 0 评论