android 启动流程
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha
adb shell 后 用 ps 命令 回车 可以看到 运行的进程。 如下结果:
cts 是测试
====
ps
USER PID PPID VSIZE RSS WCHAN PC NAME
root 1 0 300 208 c009b74c 0000ca4c S /init
root 2 0 0 0 c004e72c 00000000 S kthreadd
root 3 2 0 0 c003fdc8 00000000 S ksoftirqd/0
root 4 2 0 0 c004b2c4 00000000 S events/0
root 5 2 0 0 c004b2c4 00000000 S khelper
root 6 2 0 0 c004b2c4 00000000 S suspend
root 7 2 0 0 c004b2c4 00000000 S kblockd/0
root 8 2 0 0 c004b2c4 00000000 S cqueue
root 9 2 0 0 c018179c 00000000 S kseriod
root 10 2 0 0 c004b2c4 00000000 S kmmcd
root 11 2 0 0 c006fc74 00000000 S pdflush
root 12 2 0 0 c006fc74 00000000 S pdflush
root 13 2 0 0 c00744e4 00000000 S kswapd0
root 14 2 0 0 c004b2c4 00000000 S aio/0
root 22 2 0 0 c017ef48 00000000 S mtdblockd
root 23 2 0 0 c004b2c4 00000000 S kstriped
root 24 2 0 0 c004b2c4 00000000 S hid_compat
root 25 2 0 0 c004b2c4 00000000 S rpciod/0
root 26 2 0 0 c019d16c 00000000 S mmcqd
root 27 1 740 256 c0158eb0 afd0d8ac S /system/bin/sh
system 28 1 808 264 c01a94a4 afd0db4c S /system/bin/servicemanager
root 29 1 3736 436 ffffffff afd0e1bc S /system/bin/vold
root 30 1 3716 400 ffffffff afd0e1bc S /system/bin/netd
root 31 1 668 240 c01b52b4 afd0e4dc S /system/bin/debuggerd
radio 32 1 5392 548 ffffffff afd0e1bc S /system/bin/rild
root 33 1 101956 15508 c009b74c afd0dc74 S zygote
media 34 1 22764 1208 ffffffff afd0db4c S /system/bin/mediaserver
root 35 1 812 340 c02181f4 afd0d8ac S /system/bin/installd
keystore 36 1 1616 280 c01b52b4 afd0e4dc S /system/bin/keystore
root 37 1 740 256 c003da38 afd0e7bc S /system/bin/sh
root 38 1 840 344 c00b8fec afd0e90c S /system/bin/qemud
root 40 1 3400 192 ffffffff 0000ecc4 S /sbin/adbd
root 51 37 796 312 c02181f4 afd0d8ac S /system/bin/qemu-props
system 59 33 178760 25892 ffffffff afd0db4c S system_server
app_23 109 33 139644 18480 ffffffff afd0eb08 S jp.co.omronsoft.openwnn
radio 113 33 147592 17820 ffffffff afd0eb08 S com.android.phone
app_25 114 33 145304 19044 ffffffff afd0eb08 S com.android.launcher
system 119 33 137000 13900 ffffffff afd0eb08 S com.android.settings
app_0 152 33 137520 17104 ffffffff afd0eb08 S android.process.acore
app_9 160 33 131632 14776 ffffffff afd0eb08 S com.android.alarmclock
app_22 171 33 131956 14260 ffffffff afd0eb08 S com.android.music
app_12 179 33 141220 18308 ffffffff afd0eb08 S com.android.quicksearchbox
app_7 194 33 130796 13736 ffffffff afd0eb08 S com.android.protips
app_2 203 33 133560 15260 ffffffff afd0eb08 S android.process.media
app_15 214 33 144568 14692 ffffffff afd0eb08 S com.android.mms
app_30 230 33 135100 16052 ffffffff afd0eb08 S com.android.email
app_19 250 33 135596 15880 ffffffff afd0eb08 S com.android.browser
root 262 40 740 332 c003da38 afd0e7bc S /system/bin/sh
root 264 262 888 336 00000000 afd0d8ac R ps
#
init 进程:
当liunx内核完成启动之后,启动的第一个进程,它属于用户级进程,也属于一个引导进程。
1 创建文件目录 2 挂载sdcard 3 引导其他的进程:ril-d (打电话 modem) bootsound bootanim ... servicemanager zygote
servicemanager进程:管理了底层的服务
zygote 进程:1 创建了runtime 2 创建了dalvik vm 3 创建上层所有的应用(给这里应用分配内存空间,进程的id,进程能访问的)
只有servicemanager进程 和zygote 进程这个两个进程都起来之后,才会建立一个真正的android空间
2 com.android.phone 电话应用:
持久应用:
条件:
1 应用程序的apk文件必须存在于:/system/app
2 应用的AndroidManifest.xml文件:
<Appliaction android:persistent="true"
3 launcher
查看源码的流程:
1 adb shell
ps
2 system\core\init\init.c
3 frameworks\base\cmds\runtime\ServiceManager.cpp
#ifndef HAVE_ANDROID_OS
QuickRuntime* runt = new QuickRuntime();
runt->start("com/android/server/SystemServer",
false /* spontaneously fork system server from zygote */);
#endif
4 frameworks\base\services\java\com\android\server\SystemServer.java
native init1()
5 frameworks\base\services\jni\com_android_server_SystemServer.cpp
system_init();
6 frameworks\base\cmds\system_server\library\system_init.cpp
SensorService::instantiate();
CameraService::instantiate();
AndroidRuntime* runtime = AndroidRuntime::getRuntime();
runtime->callStatic("com/android/server/SystemServer", "init2");
7 frameworks\base\services\java\com\android\server\SystemServer.java
init2();
((ActivityManagerService)ActivityManagerNative.getDefault())
.systemReady(new Runnable() {}
qb.setTables("sms, (SELECT thread_id AS group_thread_id, MAX(date)AS group_date,"
+ "COUNT(*) AS msg_count FROM sms GROUP BY thread_id) AS groups");
qb.appendWhere("sms.thread_id = groups.group_thread_id AND sms.date ="
+ "groups.group_date");
qb.setProjectionMap(sConversationProjectionMap);
SELECT thread_id AS group_thread_id, MAX(date)AS group_date,COUNT(*) AS msg_count FROM sms GROUP BY thread_id AS groups
sConversationProjectionMap.put(Sms.Conversations.SNIPPET,sinppet
"sms.body AS snippet");
sConversationProjectionMap.put(Sms.Conversations.THREAD_ID,thread_id
"sms.thread_id AS thread_id");
sConversationProjectionMap.put(Sms.Conversations.MESSAGE_COUNT,msg_count
"groups.msg_count AS msg_count");
select
sms.body AS snippet,sms.thread_id AS thread_id,groups.msg_count AS msg_count
from
sms,(SELECT thread_id AS group_thread_id, MAX(date)AS group_date,COUNT(*) AS msg_count FROM sms GROUP BY thread_id) AS groups
where
sms.thread_id = groups.group_thread_id AND sms.date = groups.group_date
1 projectionIn != null
1.1 mProjectionMap != null
1.2 mProjectionMap == null projectionIn
2 projectionIn = = null && mProjectionMap != null mProjectionMap.getValue()
select thread_id,name
select sms.thread_id AS thread_id address as
=====
====
过滤原理 过滤的实现
handler 原理
【2012黑马程序员】短信智能管理器day01
=======
android 启动流程的更多相关文章
- Android 启动流程分析
原文:https://www.jianshu.com/p/a5532ecc8377 作者曾经在高通的Android性能组工作,主要工作是优化Android Application的启动时间. APP基 ...
- Android启动流程
Android是一个基于Linux的开源操作系统.x86(x86是一系列的基于intel 8086 CPU的计算机微处理器指令集架构)是linux内核部署最常见的系统.然而,所有的Android设备都 ...
- Tiny4412 Android 启动流程
Android系统的启动主要包括三个阶段: ①BootLoader启动 ②Linux Kernel启动 ③Android系统启动 前面我们大致分析了前面两个步骤,即u-boot和内核的启动流程(内核启 ...
- android 启动流程 相关 杂项记录
Android原生流程 Init进程 主要流程及分支梳理 ueventd_main()watchdogd_main()主要流程a) 公共部分 增加PATH 环境变量初始化内核日志,打开/dev/kms ...
- 深入浅出 - Android系统移植与平台开发(四)- Android启动流程
作者:唐老师,华清远见嵌入式学院讲师. 一.Android init进程启动 还是从Linux的启动开始吧.Linux被bootloader加载到了内存之后,开始运行,在初始化完 Linux运行环境之 ...
- android 启动流程 相关2 init进程 属性服务
Init属性服务 系统属性服务 属性梳理 来源和读取时机 来源:内核参数 ro.kernel.* 代表有qemu内核参数才会设置(在虚拟机中) ro.boot.* 1.内核设备树相关的设备 ...
- 【转】android SystemUI 流程分析
android4 SystemUI 流程分析 什么是SystemUI? 对于Phone来说SystemUI指的是:StatusBar(状态栏).NavigationBar(导航栏).而对于Tablet ...
- Android进阶系列之源码分析Activity的启动流程
美女镇楼,辟邪! 源码,是一个程序猿前进路上一个大的而又不得不去翻越障碍,我讨厌源码,看着一大堆.5000多行,要看完得啥时候去了啊.不过做安卓的总有这一天,自从踏上这条不归路,我就认命了.好吧,我慢 ...
- Android FM模块学习之一 FM启动流程
最近在学习FM模块,FM是一个值得学习的模块,可以从上层看到底层. 上层就是FM的按扭操作和界面显示,从而调用到FM底层驱动来实现广播收听的功能. FM启动流程:如下图: 先进入FMRadio.jav ...
随机推荐
- HOMEWORK-2
没什么超乎常人的技能吧,我想.关于C的学习之前一直是自学,上了大学也是吃老底(上一篇提到了),因为这个学期一直在学matlab,C除了帮人写过作业教过课自己也没写点什么. 指针的概念还算清楚,毕竟经常 ...
- 你不知道的Static
Static静态字段,静态方法,静态代码块 壹 简介 一些场景下会要求一个类的多个实例共享一个成员变量:有时候想定义一些不和具体对象关联.不需要new就调用的方法 举例:Console类的Write ...
- canvas h5制作写字板
<!DOCTYPE html><html><head> <meta charset="utf-8"> <script type ...
- PHPMailer发送邮件(一)
Github 地址:(已更新,适用于旧版) PHPMailer : https://github.com/PHPMailer/PHPMailer 一.基本要求 Web访问正常(apache可以正常访问 ...
- 深入理解Spring系列之十一:SpringMVC-@RequestBody接收json数据报415
转载 https://mp.weixin.qq.com/s/beRttZyxM3IBJJSXsLzh5g 问题原因 报错原因可能有两种情况: 请求头中没有设置Content-Type参数,或Conte ...
- 16级第二周寒假作业E题
Home_W的位运算4 TimeLimit:2000MS MemoryLimit:128MB 64-bit integer IO format:%I64d Problem Description 给 ...
- imperva配置文件的导入导出
imperva配置文件的导入导出 Full_expimp.sh //进行备份 1导入 2导出 输入密码后 1 全部导出 是否想导出失败的数据 默认密码是system的密码 输入导出的路径 ...
- 不相交集ADT--链表实现
每一个集合用用一个链表来表示.链表的第一个对象作为它所在集合的代表.链表中每个对象都包含一个集合成员,一个指向下一个对象的指针,以及指向代表的指针.每个链表含head和tail指针,head指向链表的 ...
- go时间和日期
1. time包 2. time.Time类型,用来表示时间 3. 获取当前时间, now := time.Now() 4. time.Now().Day(),time.Now().Minute(), ...
- awk正则匹配nginx日志【原创】
查看网页访问代码不为200和30x所有行的内容 awk '{if($9!~/200|30*/) print $0}' /app/logs/http_access.log 或 awk '$9!~/200 ...