- 浏览: 226355 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
sfshine:
非常好非常好
Android 窗口管理 -
mthhk:
...
android3.0之Fragment(碎片)基础 -
FrankHB1989:
“C/C++标准不会保证这样的代码一定不会出错”的依据?你要说 ...
Duff's Device -
2006003845:
请问知道 刚体之间怎么不碰撞嘛 ?相互穿插
JBOX2D分析
启动activity:
**android.process.acore进程
1.Acticity.startActivityForResult()
2.Instrumention.execStartActivity();
3.ActivityManagerNative.getDefault()
.startActivity()
3.1 ActivityManagerNative.getDefault()返回的是ActivityManagerProxy的实例,
它只是一个代理类,这个代理类实际上代理的是IBinder b = ServiceManager.getService("activity");
这个Service。
3.2 这个Service是什么时候添加进来的呢?
在SystemServer.java的run()中有调用
ActivityManagerService.setSystemProcess();
ServiceManager.addService("activity", m);
这里还会添加许多系统关键服务。
(TODO:查看在SystemServer的Log输出)
**system_process进程
4 ActivityManagerNative
|--ActivityManagerService
在ActivityManagerNative的onTransact方法中最终提供了服务:
case START_ACTIVITY_TRANSACTION:
ActivityManagerService.startActivity();
--startActivityLocked(IApplicationThread caller,
Intent intent, String resolvedType,
Uri[] grantedUriPermissions,
int grantedMode, ActivityInfo aInfo, IBinder resultTo,
String resultWho, int requestCode,
int callingPid, int callingUid, boolean onlyIfNeeded,
boolean componentSpecified)
--startActivityUncheckedLocked(r, sourceRecord,
grantedUriPermissions, grantedMode, onlyIfNeeded, true)
在这个方法里面检查权限,解析intent中的Flag。。。
--startActivityLocked(HistoryRecord r, boolean newTask)
--resumeTopActivityLocked(HistoryRecord prev)
--startSpecificActivityLocked(HistoryRecord r,boolean andResume, boolean checkConfig)
--startProcessLocked(String processName,ApplicationInfo info, boolean knownToBeDead, int intentFlags,String hostingType, ComponentName hostingName)
--startProcessLocked(ProcessRecord app,String hostingType, String hostingNameStr)
在这里启动一个进程用来host这个应用
int pid = Process.start("android.app.ActivityThread",
mSimpleProcessManagement ? app.processName : null, uid, uid,
gids, debugFlags, null);
ActivityManagerService.java
--startSpecificActivityLocked(HistoryRecord r,boolean andResume, boolean checkConfig)
--realStartActivityLocked(HistoryRecord r,ProcessRecord app, boolean andResume, boolean checkConfig)
--app.thread.scheduleLaunchActivity //scheduleLaunchActivity()@IApplicationThread.java
--scheduleLaunchActivity()@ActivityThread.java //这里实际是ApplicationThreadNative提供的服务
--handleMessage()@H$ActivityThread.java
--handleLaunchActivity()@ActivityThread.java
--Activity performLaunchActivity(ActivityRecord r, Intent customIntent)@ActivityThread.java //这时真正的Activity对象被构造出来
--mInstrumentation.newActivity() //通过反射构造出Activity对象
--activity.attach() //初始化Activity,生成一个window对象,设置各种状态等等
--mInstrumentation.callActivityOnCreate(activity, r.state); //调用Activity的onCreate()方法
到这里,我们自己写的activity的onCreate()方法已经被系统调用了,接下来依次回调生命周期方法:
--activity.performStart();
--mInstrumentation.callActivityOnStart(this);
--mInstrumentation.callActivityOnRestoreInstanceState(activity, r.state);
--mInstrumentation.callActivityOnPostCreate(activity, r.state);
--mActivities.put(r.token, r); //将这个activity入栈
然后就要调用onResume()方法了:
--handleResumeActivity(IBinder token, boolean clearHide, boolean isForward)
--performResumeActivity(token, clearHide);
--r.activity.performResume();
--performRestart()@Activity.java;
--mInstrumentation.callActivityOnRestart(this);
--mInstrumentation.callActivityOnStart(this);
--mInstrumentation.callActivityOnResume(this);
onResume()已经调用完毕,一个activity的逻辑处理结束了,但是这时候屏幕上还不会显示任何东西,因为View还没有添加进去
--r.window.getDecorView(); //开始把DecorView添加进Window
--wm.addView(decor, l);
至此一个Activity启动结束。
发表评论
-
Java中循环嵌套跳出的高效写法
2014-04-24 19:31 3089(下面写的这些并不是Jdk的新特性,也不是Java某个版本提供 ... -
Android各版本新增功能一览(转)
2013-12-05 20:43 1648Android3.0新增功能:主要增加全息主题 ... -
NotificationManager和Notification的使用总结(转)
2013-11-26 12:51 586这几天一直在修改twig ... -
Android应用程序资源的编译和打包过程分析 (转自老罗的博客)
2013-11-13 10:57 15468我们知道,在一个APK文件中,除了有代码文件之外,还 ... -
Proguard 源码分析 (七) 混淆
2013-11-10 21:19 1768本章我们讲Proguard非常重要的一个步骤:混淆Obfu ... -
Proguard源码分析(六)前文总结
2013-11-05 14:40 1034目前,我们读了Proguard的 ... -
Proguard源码分析(五) ConfigurationParser.keep参数
2013-10-31 14:43 3890本章节我们绕回来讲Keep参数,也就是Configurat ... -
Proguard源码分析(四) 压缩
2013-10-30 10:59 1076上一次我们讲了seed文件,这次我们说压缩,对应的输出文件是 ... -
Proguard源码分析(三)Seed文件
2013-10-29 12:45 1484Seed文件就是保持住的类文件,直白一点就是不被混淆的文件, ... -
Proguard源码分析(二)输出文件
2013-10-28 10:28 874ProGuard outputs thefollowing ... -
Android 2.2.2到Android 4.2.2源码下载地址(转)
2013-10-28 10:13 953Android 2.2.2到Android 4.2.2源码下 ... -
代码混淆器Proguard源码分析(一) 读取
2013-10-22 19:40 2266Proguard是Android中经常用的混淆工具,当然你也 ... -
Android内存之VSS/RSS/PSS/USS
2013-09-25 14:07 658Terms VSS - Vi ... -
chrome开源工程(转)
2013-09-13 10:42 1279在chrome地址栏输入about:credits就可以看 ... -
dex文件结构(转)
2013-09-03 14:10 972Dex文件和Dalvik虚拟机 在Android系统中 ... -
android clipPath切割画布
2013-08-29 12:00 6181(转自:http://wallage.blog.163.co ... -
Android WebView控件
2013-06-06 11:46 2214android.webkit库聚合了webkit内核的浏览器 ... -
dumpsys命令~(非常有用~)
2013-04-03 12:02 0dumpsys是系统中重要的函数,我们来看看它如何使用,都能 ... -
内存监控命令~
2013-04-03 00:30 0meminfo 命令:cat /proc/meminfo ... -
adb常用命令
2013-04-03 00:17 1054Android 调试桥(adb)是多种用途的工具,该工具可以 ...
相关推荐
Activity和Service是应用程序的核心组件,程序框架层提供了一套完整的机制来协助应用程序启动Activity和Service
使用appWidget启动一个Activity
Activity启动过程
本篇文章主要介绍了浅谈android性能优化之启动过程(冷启动和热启动) ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
Activity 启动过程源码+分析过程
Android应用程序的Activity启动过程简要介绍和学习计划
Hook技术activity启动过程中拦截(无需在androidmanifest文件注册即可使用)
分析Android Activity的启动过程 对于Android Activity 的启动过程,我在Android源码中读了好久的源码,以下是我整理出来的Activity启动过程和大家分享下: Activity作为Android的四大组件之一,也是最基本的组件...
Android应用程序的Activity启动过程简要介绍和学习计划.docAndroid应用程序的Activity启动过程简要介绍和学习计划.docAndroid应用程序的Activity启动过程简要介绍和学习计划.docAndroid应用程序的Activity启动过程...
老罗Activity启动过程文章中,时序图比较模糊看不清,自己重新做了一个
Activity的启动过程,我们可以从Context的startActivity说起,其实现是ContextImpl的startActivity,然后内部会通过Instrumentation来尝试启动Activity,这是一个跨进程过程,它会调用ams的startActivity方法,当AMS...
不过本文的侧重点不是它们,我要介绍的是一个Activity典型的启动过程,本文会从源码的角度对其进行分析。我们知道,当startActivity被调用的时候,可以启动一个Activity,但是你知道这个Activity是如何被启动的吗?...
Android_11_Activity 启动过程分析流程图原件
Activity启动时候获取View宽高的四种方法,因为Activity的生命周期回调和view的measure过程不是同步执行的,所以无法在activity的onCreate、onStart和onResume里面准确的获取view的宽和高,可以通过以下四个方法来...
注:只是说明启动activity的过程(ActivityThread如何与ActivityManagerService简称AmS进行进程间通信调用全过程),不解析android从zygote(受精卵)到整个系统服务的启动 具体来讲,启动activity的方式有以下几种...
Activity的启动过程一.Launcher进程请求AMSLauncher.java的startActivitySafely方法的执行过程:Activity.java中startActivity方法的执行过程:startActivityForResult方法的执行过程:Instrumentation.java中...