文章目录
- Android的系统架构
- 深入理解PackageManagerService
- 深入理解ActivityManagerService
- Window 、WindowManager和WindowManagerService
- Application生命周期
- 应用进程启动流程
- Android Activity生命周期
- Activity布局加载流程
- Android 中的Activity、Window、View之间的关系
- ActivityThread的主要工作及实现机制
- 应用进程Context创建流程
- Android Context 是什么?
- Binder 详解
- SharedPreferences的源码设计及优缺点
- Android LruCache和Glide LruCache源码分析
- Camera 相关
- Android页面恢复
- Android虚拟机 Android App运行的沙箱原则
- Android技术难点
Android的系统架构
http://www.jianshu.com/p/2e14ca7ee678
深入理解PackageManagerService
https://blog.youkuaiyun.com/Innost/article/details/47253179
深入理解ActivityManagerService
https://blog.youkuaiyun.com/innost/article/details/47254381
ActivityManagerService架构剖析
https://www.jianshu.com/p/17b2844b2a27
Window 、WindowManager和WindowManagerService
WindowManager 原文 https://juejin.im/post/6844903991348822030
系统窗口的添加过程
Activity 的添加过程
Window 的更新过程
WindowManagerService 原文 https://juejin.im/post/6844903993135611911
WMS 的职责、WMS 创建过程、WMS 重要成员、Window 的添加过程、Window 删除过程
Application生命周期
https://blog.youkuaiyun.com/maican666/article/details/77257878
- onCreate() 程序创建的时候执行
- onTerminate() 程序终止的时候执行
在模拟环境下执行。当终止应用程序对象时调用,不保证一定被调用,
当程序是被内核终止以便为其他应用程序释放资源,那么将不会提醒,
并且不调用应用程序Application对象的onTerminate方法而直接终止进程。 - onLowMemory() 低内存的时候执行
好的应用程序一般会在这个方法里面释放一些不必要的资源来应付当后台程序已经终止,
前台应用程序内存还不够时的情况。 - onConfigurationChanged(Configuration newConfig) 配置改变时触发这个方法。
- onTrimMemory(int level)程序在进行内存清理时执行
应用进程启动流程
http://blog.youkuaiyun.com/qq_23547831/article/details/51119333
Android Activity生命周期
Activity启动流程: http://blog.youkuaiyun.com/qq_23547831/article/details/51224992
-
Activity的启动流程一般是通过调用startActivity或者是startActivityForResult来开始的
-
startActivity内部也是通过调用startActivityForResult来启动Activity,只不过传递的requestCode小于0
-
Activity的启动流程涉及到多个进程之间的通讯这里主要是ActivityThread与ActivityManagerService之间的通讯
-
ActivityThread向ActivityManagerService传递进程间消息通过ActivityManagerNative,ActivityManagerService向ActivityThread进程间传递消息通过IApplicationThread。
ActivityManagerService接收到应用进程创建Activity的请求之后会执行初始化操作,解析启动模式,保存请求信息等一系列操作。
-
ActivityManagerService保存完请求信息之后会将当前系统栈顶的Activity执行onPause操作,并且IApplication进程间通讯告诉应用程序继承执行当前栈顶的Activity的onPause方法;
-
ActivityThread接收到SystemServer的消息之后会统一交个自身定义的Handler对象处理分发;
-
ActivityThread执行完栈顶的Activity的onPause方法之后会通过ActivityManagerNative执行进程间通讯告诉ActivityManagerService,栈顶Actiity已经执行完成onPause方法,继续执行后续操作;
-
ActivityManagerService会继续执行启动Activity的逻辑,这时候会判断需要启动的Activity所属的应用进程是否已经启动,若没有启动则首先会启动这个Activity的应用程序进程;
-
ActivityManagerService会通过socket与Zygote继承通讯,并告知Zygote进程fork出一个新的应用程序进程,然后执行ActivityThread的mani方法;
-
在ActivityThead.main方法中执行初始化操作,初始化主线程异步消息,然后通知ActivityManagerService执行进程初始化操作;
-
ActivityManagerService会在执行初始化操作的同时检测当前进程是否有需要创建的Activity对象,若有的话,则执行创建操作;
-
ActivityManagerService将执行创建Activity的通知告知ActivityThread,然后通过反射机制创建出Activity对象,并执行Activity的onCreate方法,onStart方法,onResume方法;
-
ActivityThread执行完成onResume方法之后告知ActivityManagerService onResume执行完成,开始执行栈顶Activity的onStop方法;
-
ActivityManagerService开始执行栈顶的onStop方法并告知ActivityThread;
-
ActivityThread执行真正的onStop方法;
Activity布局加载流程
http://blog.youkuaiyun.com/qq_23547831/article/details/51284556
-
Activity的展示界面的特性是通过Window对象来控制的;
-
每个Activity对象都对应这个一个Window对象,并且Window对象的初始化在启动Activity的时候完成,在执行Activity的onCreate方法之前;
-
每个Window对象内部都存在一个FrameLayout类型的mDector对象,它是Acitivty界面的root view;
-
Activity中的window对象的实例是PhoneWindow对象,PhoneWindow对象中的几个成员变量mDector,mContentRoot,mContentParent都是View组件,它们的关系是:mDector –> mContentRoot –> mContentParent –> 自定义layoutView
-
LayoutInflater.inflate主要用于将布局文件加载到内存View组件中,也可以设定加载到某一个父组件中;
-
典型的Activity的onCreate方法中需要调用super.onCreate方法和setContentView方法,若不调用super.onCreate方法,执行启动该Activity的逻辑会报错,若不执行setContentView的方法,该Activity只会显示一个空页面。
Android 中的Activity、Window、View之间的关系
http://www.cnblogs.com/kest/p/5141817.html
ActivityThread的主要工作及实现机制
http://www.cnblogs.com/younghao/p/5126408.html
应用进程Context创建流程
http://blog.youkuaiyun.com/qq_23547831/article/details/51252082
Android Context 是什么?
https://blog.youkuaiyun.com/feiduclear_up/article/details/47356289
- Context类是一个抽象类,具体实现在ContextImpl类中;而ContextWrapper是Context的一个包装类(装饰器模式),其里面所有的方法实现都是调用其内部mBase变量的方法,而mBase就是ContextImpl对象
- ContextThemeWrapper中扩展了主题相关的方法。Application和Service是继承自ContextWrapper,而Activity是继承自ContextThemeWrapper(Activity在启动的时候系统都会加载一个主题)
Context继承关系图:
Binder 详解
图解 Binder 机制
https://blog.youkuaiyun.com/u013309870/article/details/105328743
Binder详解脑图
- 漫天尘沙 图解 Binder
https://www.cnblogs.com/samchen2009/p/3316001.html
其中Binder 类图
Native 实现: IBinder, BBinder, BpBinder, IPCThread, ProcessState, IInterface, etc
Java 实现: IBinder, Binder, BinderProxy, Stub, Proxy.
Binder Driver: binder_proc, binder_thread, binder_node, etc.
SharedPreferences的源码设计及优缺点
https://blog.youkuaiyun.com/mq2553299/article/details/109134825
Google官方已经准备用DataStore替换SharedPreferences,链接如下
https://developer.android.com/topic/libraries/architecture/datastore
Android 性能优化 – MMKV使用与原理
https://blog.youkuaiyun.com/CSqingchen/article/details/106344399
Android LruCache和Glide LruCache源码分析
https://blog.youkuaiyun.com/zhongyili_sohu/article/details/105969763
- LruCache 内部使用Map保存内存级别的缓存
- LruCache 使用泛型可以设配各种类型
- LruCache 使用了Lru算法保存数据(最短最少使用least recent use)
- LruCache 用put和get方法压入数据和取出数据
http://blog.youkuaiyun.com/qq_23547831/article/details/50971968
Camera 相关
- Android Camera2 简介
- Camera2.0新API与Camera旧API使用对比总结
- Android Camera API和HAL版本对应关系
- Google Camera2 CameX Demo
Android页面恢复
Android的页面恢复采用以下两个方法:
onSaveInstanceState(Bundle outState)
onRestoreInstanceState(Bundle savedInstanceState)
onSaveInstanceState: 当Activity容易被系统销毁时,会触发该方法,比如:用户点击Home键、 用户点击Home键,切换到其他应用程序、有电话来了等附加操作
Android虚拟机 Android App运行的沙箱原则
浅析Android沙箱模型 https://blog.youkuaiyun.com/ljheee/article/details/53191397
Android技术难点
多进程的运用,经常会启动例如定位、推送等需要在后台开启动的进程来来保证主进程的内存运行;所以合理的使用多进程也是十分必要的;
事件分发一直是Android开发的难点之一,也是必须掌握的;
关于handler机制也是android的一块难点,因为包括Asynctask、系统启动、Intentservice等底层都是通过handler来实现的。