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 ...
随机推荐
- 【swupdate文档 五】从可信的来源更新镜像
从可信的来源更新镜像 现在越来越重要的是,设备不仅要能安全地进行更新操作, 而且要能够验证发送的图像是否来自一个已知的源, 并且没有嵌入恶意软件. 为了实现这个目标,SWUpdate必须验证传入的镜像 ...
- Redis 启动警告解决【转】
[root@centos224]# service redisd start :M Nov :: (it was originally set to ). _._ _.-``__ ''-._ _.-` ...
- NEERC2012
NEERC2012 A - Addictive Bubbles 题目描述:有一个\(n \times m\)的棋盘,还有不同颜色的棋子若干个,每次可以消去一个同种颜色的联通块,得到的分数为联通块中的棋 ...
- .pnts点云
一种3d tiles格式 MIME格式: <configuration> <system.webServer> <staticContent> <remove ...
- Kail Linux渗透测试之测试工具Armitage
Kali Linux下的Armitage是一个很强大的渗透工具,图形化操作页面,但我们把kali linux装在虚拟机里面,然后再启动armitage就会出现一个error,他会给你一个message ...
- POJ 3253 Fence Repair(哈夫曼编码)
题目链接:http://poj.org/problem?id=3253 题目大意: 有一个农夫要把一个木板钜成几块给定长度的小木板,每次锯都要收取一定费用,这个费用就是当前锯的这个木版的长度 给定各个 ...
- day2 字符串常用方法总结
字符串在Python中是常用的功能,我们知道,字符串在Python中存储的形式是以字符数组的形式存在,比如"alex"在内存中的存储形式是:["a"," ...
- 当参数为带参数的url时怎么办?
比如地址为:http://www.baidu.com/index.aspx?url=http://www.baidu.com/info.aspx?id=1&type=1,用Request[&q ...
- MySQL 中的日期时间类型
日期时间类型中包含以下几种数据类型: DATE TIME DATETIME TIMESTAMP YEAR 各类型都有具体的取值范围,超出或非法的其他值时,MySQL 会回退到 0.TIMESTAMP ...
- 用 Python实现一个ftp+CRT(不用ftplib)
转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5590004.html 本来最初的想法是实现一个ftp服务器,用来实现用户的登陆注册和文件的断点上传下载等,结果做着 ...