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 ...
随机推荐
- 【NOIP】普及组2009 细胞分裂
[算法]数论 [题解]均分的本质是A整除B,A整除B等价于A的质因数是B的子集. 1.将m1分解质因数,即m1=p1^a1*p2^a2*...*pk^ak 所以M=m1^m2=p1^(a1*m2)*p ...
- 【leetcode 简单】第三十九题 Excel表列名称
给定一个正整数,返回它在 Excel 表中相对应的列名称. 例如, 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> ...
- JS中函数void()
<a href="javascript:void(0)">hello</a>/* * JS中函数void()的运用大体是这种新式; * void()是运算符 ...
- 16级第二周寒假作业H题
快速幂(三) TimeLimit:2000MS MemoryLimit:128MB 64-bit integer IO format:%I64d Problem Description 计算( AB ...
- Linux进程的创建函数fork()及其fork内核实现解析【转】
转自:http://www.cnblogs.com/zengyiwen/p/5755193.html 进程的创建之fork() Linux系统下,进程可以调用fork函数来创建新的进程.调用进程为父进 ...
- 5.Python3标准库-日期和时间
''' 不同于int,str,float,Python没有包含对应日期和时间的原生类型,不过提供了3个相应的模块,可以采用多种表示来管理日期和时间值 time模块由底层C库提供与时间相关的函数.它包含 ...
- windows 10开启bash on windows,配置sshd,部署hadoop
1.安装Bash on Windows 这个参考官网步骤,很容易安装,https://msdn.microsoft.com/en-us/commandline/wsl/install_guide 安装 ...
- MySQL JDBC驱动下载
下载地址:https://pan.baidu.com/s/1VLNaV_rz2P1jMtYrjJydiQ
- AtCoder Non-decreasing(数学思维)
题目链接:https://abc081.contest.atcoder.jp/tasks/arc086_b 题目大意:有n个数,最多可以执行2*n次操作,每次可以选择将ai加到aj上,最终使得该序列满 ...
- HDU 4553 约会安排(线段树区间合并+双重标记)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4553 题目大意:就是有三种操作: ①DS x,安排一段长度为x的空闲时间跟屌丝一起,输出这段时间的起点 ...