Android5.0 Framework - Activity启动过程(一)
来源:互联网 发布:情侣套装淘宝网 编辑:程序博客网 时间:2024/05/21 10:52
Android5.0 Framework - Activity启动过程(一)
标签(空格分隔): Android Framework
1. 打开Activity
startActivity(new Intent(MyActivity.this, OtherActivity.class));
2. 进入Activity源码分析
android.app.Activity
@Override //入口 public void startActivity(Intent intent) { this.startActivity(intent, null); }
….省略代码…
@Override public void startActivity(Intent intent, @Nullable Bundle options) { if (options != null) { startActivityForResult(intent, -1, options); } else { // Note we want to go through this call for compatibility with // applications that may have overridden the method. //-1表示不需要这个Actvity结束后的返回结果 startActivityForResult(intent, -1); } }
….省略代码…
public void startActivityForResult(Intent intent, int requestCode) { startActivityForResult(intent, requestCode, null); }
最终到startActivityForResult(intent, requestCode, null);
方法处理
public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) { if (mParent == null) { //Activity启动执行交由Instrumentation对象去处理 //ActivityThread mMainThread 是应用程序的主线程 //Instrumentation mInstrumentation来监控应用程序和系统的交互 //mToken也是Activity类的成员变量,它是一个Binder对象的远程接口 Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken, this, intent, requestCode, options); if (ar != null) { //发送结果,即onActivityResult会被调用 mMainThread.sendActivityResult( mToken, mEmbeddedID, requestCode, ar.getResultCode(), ar.getResultData()); } if (requestCode >= 0) { mStartedActivity = true; } final View decor = mWindow != null ? mWindow.peekDecorView() : null; if (decor != null) { decor.cancelPendingInputEvents(); } // TODO Consider clearing/flushing other event sources and events for child windows. } else { //在ActivityGroup内部的Activity调用startActivity的时候会走到这里,内部处理逻辑和上面是类似的 if (options != null) { mParent.startActivityFromChild(this, intent, requestCode, options); } else { // Note we want to go through this method for compatibility with // existing applications that may have overridden it. mParent.startActivityFromChild(this, intent, requestCode); } } if (options != null && !isTopOfTask()) { mActivityTransitionState.startExitOutTransition(this, options); } }
- 主要参数说明:
- mInstrumentation:Instrumentation用来辅助Activity完成启动Activity的过程
- this:当前对象,也就是上下文
- mMainThread.getApplicationThread():ActivityThread是主线程
- mToken:是IBinder是远程接口,主要用于数据传输
那么Instrumentation到底如何启动Activity待续…
0 0
- Android5.0 Framework - Activity启动过程(一)
- Android5.0 Framework - Activity启动过程(二)
- Framework Activity启动过程
- Activity启动过程(一)
- Android O Framework架构分析(一):以AMS视角看Activity启动过程
- Activity启动过程(一)AMS
- Framework之Activity 启动过程详解
- <Android Framework 之路>Android5.1 Camera Framework(一)
- zend framework 2初探(一):启动过程
- 点击桌面图标Activity启动流程分析 - 基于Android5.0源码
- Android的activity启动的过程(一)
- Activity启动过程(一):通过ActivityThread send message启动activity
- App的启动过程(2)framework侧-恢复最上层的Activity
- Android FrameWork——Activity启动过程详解
- Android FrameWork——Activity启动过程详解
- Android FrameWork——Activity启动过程详解
- Android FrameWork——Activity启动过程详解
- Android FrameWork——Activity启动过程详解
- 网络虚拟化技术(二): TUN/TAP MACVLAN MACVTAP
- jquery实现倒计时效果
- JAVA笔记——自定义注解
- java 设计模式示例
- Struts2 自定义拦截器
- Android5.0 Framework - Activity启动过程(一)
- import随想
- /proc目录
- Mysql全文本检索-MyISM引擎,Where子句中使用Match() Against()-布尔模式
- [LeetCode] Flatten Binary Tree to Linked List
- 揭秘女程序员是怎样炼成的
- hello csdn blog
- 侵入式和非侵入式的区别
- Android应用设计之实现多线程框架