小工具知识网

当前位置: 首页 > 行业知识 > Android随手记

行业知识

Android随手记

2026-11-10 22:47:43 来源:互联网转载

activity的生命周期

创建时

onCreate() - onStart() - onResume() - onPause() - onStop() - onDestroy()

切换时

a��换到b

a.onCreate() - a.onStart() - a.onResume - a.onPause - b.onCreate() - b.onStart() - b.onResume() - a.onStop()

b切换回a

b.onPause() - a.onRestart() - a.onStart() - a.onResume() - b.onStop() - b.onDestory()

Handler相关

Handler是什么

一句话总结:Handler是用于与跨线程通信的,而每个线程都有自己的looper,looper管理线程的任务,所以其实Handler就是用于与looper通信的,在Handler里装哪个looper,最终代码就在哪个线程上跑

Looper

Looper的ThreadLocal

Looper内部有个成员变量sThreadLocal,用于在不同的线程获取不同(每个线程独有的)looper

Looper.prepare()的内部其实是sThreadLocal.set(new Looper),就是创建一个新的looper,set到当前线程里去,以后在这个线程里拿的looper就是这里来的

Looper.myLooper()的内部是sThreadLocal.get(),就是去get了一下之前set的looper

Android开机流程

电源键

按下电源键后,引导芯片代码从固化在ROM中的地方开始执行,加载引导程序BootLoader到RAM中,然后执行

BootLoader

BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。

Kernel

Android内核启动时,会设置缓存、被保护存储器、计划列表,加载驱动。当内核完成系统设置,它首先在系统文件中寻找”init.rc”文件,然后启动init进程

init

init进程是第一个用户空间的进程,也就是第1号进程(第0号进程是linux)

init进程在system/core/init/main.cpp文件的main函数中,分为两个阶段完成启动过程

第一阶段时进行一些目录创建、设备节点创建和设备挂载的动作(毕竟Android跑在linux上)

第二阶段启动属性服务(指定文件读取属性、系统属性等)、解析init.rc文件并启动相关进程

其中第二阶段的init.rc不止一份,例如google、soc、odm厂商都有自己的init.rc

Zygote

Zygote进程由init进程启动,他是Android系统的第一个进程(pid为0)

init拉起Zygote的简化代码如下

Result Service::Start() {    ...    pid_t pid = -1;    if (namespaces_.flags) {        pid = clone(nullptr, nullptr, namespaces_.flags | SIGCHLD, nullptr);    } else {        pid = fork();// 1.fork创建service进程(也就是zygote进程)    }    if (pid == 0) {        ...        if (!ExpandArgsAndExecv(args_, sigstop_)) {            PLOG(ERROR) 

上一篇:企业服务器怎么下载文件?

下一篇:[C][初识C语言][数据类型][变量作用域][变量生命周期]详细讲解