启动流程
1:首先是bootloader,进行硬件环境初始化,然后将内核Linux内核加载进内存;
2:内核加载进内存之后进入引导阶段,然后进入内核启动阶段,内核启动完毕之后,内核会启动用户空间的进程init进程;
3:init进程会解析init.rc配置文件,在配置文件中会启动两个进程zygote和ServiceManager,zygote用来启动虚拟机和java进程,ServiceManager用来Binder通信;
zygote进程主要做了这几件事
1:开启一个socket,用来以后也ActivityManagerService进行通信启动应用程序
2:加载Class资源和Res系统资源
3:fock一个system_server进程,在这个进程中启动了Android系统的各种系统服务,包括PMS、AMS等,这些系统服务器会注册到ServiceManager中为Binder通信做准备。
4:最后zygote通过socket执行请求,启动Launcher页面
消息机制
Android使用消息机制来完成多线程之间的信息传递,消息机制中主要有这样几个概念:Looper线程、消息、消息队列、消息处理器
Looper线程:在Android初始化完成以后系统会创建一个Looper线程,在这个线程中会提供消息机制的所有对象,包括消息队列、消息处理器,Looper线程会一直循环来等待消息处理消息。
消息:Message,这个对象是用来封装消息的对象,包括消息的标识、消息的内容、消息的处理时间等。
消息队列:MessageQueue,在Looper线程的准备阶段会创建详细队列,所有的消息中都会发送到消息队列中,根据消息对象中的处理时间来给消息排序等待Looper的处理。
消息处理器:Handler,Looper在处理消息的时候使用Handler来处理,我们通过集成Handler来完成消息处理,在消息处理阶段,回去判断有没有回调参数,如果没有交给子类覆写的handlMessage来完成,处理消息的线程就是Handler对象创建的线程。