第一章 Android的生命周期和启动
异常情况下生命周期有两种情况:
1.资源相关的系统配置发生改变导致Activity被杀死并重新创建。此流程中主要会调用onSaveInstanceSate和OnRestoreInstanceState两接口。具体如下图

2. 资源内存不足导致低优先级的Activity被杀死。也是和上面图1的方式一样启动Activity。
IntentFilter的匹配规则
Activity启动方式有两种,显式调用和隐式调用。显式调用:需要明确指定被调用对象的组件信息,包括包名和类名。隐式调用:不需要指定组件信息。如果两个调用都存在,以显式调用为主。
第二章 IPC机制
IPC 是Inter-Process Communication。进程间通讯
ANR(Application Not Responding) 应用无响应
android 开启多进程模式方式:给四大组件(Activity,Service,Receiver,ContentProvider)在AndroidMenifest中指定android:process属性,就实现了多进程模式。
IPC基础概念介绍
Serializable接口:java的序列化接口。
Parcelable接口:android的序列化接口。
Binder的工作机制:如下图:

Android中的IPC方式的优缺点和使用场景:如下图:

第3章 View的事件体系
点击事件的传递规则:
Activity->Window->View. 事件总是先传递给Activity,Activity再传递给Window,最后才传递给顶层View。顶层View按事件分发机制去分发事件。
当一个View需要处理事件,如果它设置流OnTouchListener,那么OnTouchListener中的onTouch方法就会被回调,如果onTouch的返回值是false,当前View的onTouchEvent方法会被调用,如果为true,那么onTouchEvent方法不调用。(未完待续........)
第4章 View的工作原理
View的三大流程:
1.measure。测量View的宽和高。这里分View和ViewGroup的measure过程。
2.layout。确定View在父容器中位置。一般通过ViewGroup来确定子元素的位置,当ViewGroup的位置被确定后,它在onLayout中会遍历所有的子元素并调用器layout方法。从而实现绘制过程。
3.draw。将View绘制在屏幕上。
ViewRoot和DecorView区别:
ViewRoot:对应于ViewRootImpl类,连接WindowManager和DecorView的纽带,View的三大流程都是通过它来完成的。在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewRootImpl对象和DecorView建立关联。
DecorView:作为顶级View,内部包含竖直方向的LinearLayout,在这个LinearLayout里面有山下两部分,上面部分为标题栏,下面部分是内容栏。上面为TopBar。在Activity中通过setContentView所设置到布局文件,其实就被加载到内容栏中。
第5章 理解RemoteView
两个RemoteView的应用:
1.顶部通知栏 2.桌面小部件。

第6章 Android 的Drawable (无记录)
第7章 Android 动画深入分析
View的动画效果主要是四种: TranslateAnimation,ScaleAnimation,RotateAnimation,AlphaAnimation.

第8章 理解Window 和WindowManager
Window是一个抽象类,每一个Window都对应着一个View和一个ViewRootImpl,Window和View通过ViewRootImpl来建立联系。
window 是分层的,每个window都有对应的z-ordered,层级大的会覆盖在层级小的window的上面。
应用Window的层级:1~99
子window 的层级:1000~1999
系统window的层级:2000~2999
所以:想要Window位于所有Window的最顶层,那么就采用较大的层级。
WinowManager 提供三个方法:添加View,更新View和删除View
Window的创建过程。
1.Activity的创建Window创建过程:在Activity的attach的方法里,系统会创建Activity所属的Window对象并为其设置回调接口,例如:onAttachedToWindow,onDetached
FromWindow,despatchTouchEvent等接口。 Window对象的创建是通过PolicyManager的makeNewWindow方法实现的
2.Dialog中创建Window创建步骤:1.创建Window。2.初始化DecorView并将Dialog的视图添加到DecorView中。3.将DecorView添加到Window中并显示。
Toast的隐藏机制:
Toast显示出来后,NMS(NotificationManagerSerice)通过scheduleTimeoutLocked方法来发送一个延时消息,其中设置了延时时间(LONG_DELAY为3.5s, SHORT_DELAY为2s),延迟相应的时间后,NMS会 通过cancelToastLocked方法来隐藏Toast并将其从mToastQueue中移除。
第9章 四大组件的工作过程
Activity的工作过程:主要讲Activity的启动过程。从startActivity方法开始,经过一系列的重载最终调用startActivityForResult方法。该方法有一系列调用,最后由ActivityManagerNative.getDefault()的startActivity方法来完成。AMS(ActivityManagerService)继承ActivityManagerNative(AMN),而AMN是继承Binder并实现了IActivityManager这个Binder接口。(未完待续.....)
Service的工作过程:Service分启动过程和绑定过程。Service的启动也是从startService开始,通过attach方法与ContextImpl对象关联起来。其实ContextImpl就是mBase。ContextImpl对象最终又是调用ActivityManagerNative.getDefault()的startActivity方法来启动一个service。这里就是类似Activity的启动过程。(未完待续.....)
Service的绑定过程:也是从ContextWrapper开始的。ContextWrapper中的bindService调用bindServiceCommon方法。(未完待续.....)
第10章 Android 的消息机制
Android的消息机制概述:Handler创建完毕后,其内部的Looper以及MessageQueue就可以协同工作了,Handler的Post方法将一个Runnable投递到Handler内部的Looper中去处理,也可以通过Handler的send方法发送一个消息,当Handler的send方法被调用后,它会调用MessageQueue的enqueueMessage方法将这个消息放入消息队列中,然后Looper发现有新消息到来时,就会处理该消息。

消息队列(MessageQueue)的工作原理:实际上是通过一个单链表的数据结构来维护消息列表的,enqueueMessage负责插入一个消息,next负责从消息队列中取出一条消息并将其从消息列表中移除。
Looper的工作原理:在消息机制中扮演着消息循环的作用。会不停地从MessageQueue队列中查看是否有新消息,若有新消息就会立刻处理,否则就一直阻塞在哪里。
Handler的工作原理:handler的工作主要包含消息的发送和接收过程。消息通过post或者send的系列方法来实现发送消息。具体就是向消息队列中插入一条消息,MessageQueue的next方法就会返回这条消息给Looper,Looper收到消息后就开始处理了,最终Looper把消息交给Handler来处理(即Handler的dispatchMessage方法被调用)。
第11章 Android的线程和线程池
主线程(UI线程):处理和界面相关的事情。若主线程执行耗时操作,就会导致应用程序无响应。
子线程:执行耗时操作。Android线程有以下分类:Thread,AsyncTask,IntentService和HandlerThread四大类。
1.AsyncTask:封装了线程池和Handler,方便在子线程中更新UI。本质上串行执行的。共有4个函数方法:(onPreExecute,doInBackground,onProgressUpdate,onPostExecute)
2.HandlerThread:具有消息循环的线程,其内部可以使用Handler。
3.IntentService:采用HandlerThread来执行任务的,当任务执行完成后,IntentService会自动退出。
(未完待续.....)
网友评论