77范文网 - 专业文章范例文档资料分享平台

Activtiy完全解析(一、Activity的创建过程)(8)

来源:网络收集 时间:2019-02-16 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

ActivityInfo aInfo = r.activityInfo; ...

ComponentName component = r.intent.getComponent(); ...

Activity activity = null; try {

//② 通过类加载器将activity的类加载进来,然后创建activity对象 java.lang.ClassLoader cl = r.packageInfo.getClassLoader(); activity = mInstrumentation.newActivity(

cl, component.getClassName(), r.intent);

StrictMode.incrementExpectedActivityCount(activity.getClass()); r.intent.setExtrasClassLoader(cl); r.intent.prepareToEnterProcess(); if (r.state != null) {

r.state.setClassLoader(cl); }

} catch (Exception e) { ... }

try {

//③ 创建Application,也就是AndroidManifest.xml配置的 Application app = r.packageInfo.makeApplication(false, mInstrumentation); ...

if (activity != null) {

//④ 创建Activity的上下文Content,并通过attach方法将这些信息设置到Activity中去

Context appContext = createBaseContextForActivity(r, activity);

CharSequence title = r.activityInfo.loadLabel(appContext.getPackageManager()); Configuration config = new Configuration(mCompatConfiguration);

//⑤ 调用activity的attach()方法,这个方法的作用主要是为activity初始化一些成员变量

activity.attach(appContext, this, getInstrumentation(), r.token, r.ident, app, r.intent, r.activityInfo, title, r.parent,

r.embeddedID, r.lastNonConfigurationInstances, config, r.referrer, r.voiceInteractor);

if (customIntent != null) {

activity.mIntent = customIntent; }

r.lastNonConfigurationInstances = null; activity.mStartedActivity = false;

int theme = r.activityInfo.getThemeResource(); if (theme != 0) {

activity.setTheme(theme); }

activity.mCalled = false; /*

* ⑥ 通过mInstrumentation调用activity的onCreate()方法,

* mInstrumentation的作用是监控Activity与系统的交互操做。 * 这时候activity的生命周期就开始了 */

if (r.isPersistable()) {

mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState); } else {

mInstrumentation.callActivityOnCreate(activity, r.state); }

//下面主要为堆栈中的ActivityClientRecord设置一些数据 ...

r.activity = activity; r.stopped = true;

if (!r.activity.mFinished) { activity.performStart(); r.stopped = false; } ... }

r.paused = true; ...

} catch (SuperNotCalledException e) { throw e;

} catch (Exception e) {

if (!mInstrumentation.onException(activity, e)) { throw new RuntimeException(

\ + \ } }

return activity; }

performLaunchActivity ()中首先根据activity的className加载类文件,并创建activity实例,然后初始化上下文Context,并调用attach()

方法初始化activity,最后通过mInstrumentation回调activity的onCreate()方法,这样Activity算是创建完成了。

这篇博客涉及到的内容还是比较多,每个过程中主要的代码注释已经标示的比较清楚了,还有些细节问题有兴趣的可以更加深入的去研究,

相信如果弄懂这个流程后,再去深入也不是什么难事了。项目中framwork层的源码都是参照android5.0版本,如果下载源码有问题的同学可以

在本篇博客末尾下载博客研究的工程(主要的源码已经摘录放入到工程中),也可以参考

http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/。

接下来对本篇博客稍作总结:

step1-step3:通过Binder机制将创建activity的消息传给ActivityManagerService

step4-step8:根据activity的启动模式判断activity是否应该重新创建,还是只需要置于栈顶,并将目标activity记录放在栈顶

step9-step10:判断activity是否已经创建,如果已经创建将直接置于resume状态,如果没有创建便重新开启

step11-step12:判断activity所属的进程是否创建,如果没有创建将启动新的进程,如果创建了就直接启动activity

step13-step15:进程的主线程执行ActivityThread的main方法,然后初始化进程相关的东西

step16-step21:实例化栈顶的activity对象,并调用Activity.attach()初始化,回调onCreate()生命周期方法;然后调用

ActivityThread.handleResumeActivity()使activity处于resume状态

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Activtiy完全解析(一、Activity的创建过程)(8)在线全文阅读。

Activtiy完全解析(一、Activity的创建过程)(8).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/474392.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: