Android5.0 Framework - Activity启动过程(一)
2015-08-11 17:57
316 查看
Android5.0 Framework - Activity启动过程(一)
标签(空格分隔): Android Framework1. 打开Activity
[code]startActivity(new Intent(MyActivity.this, OtherActivity.class));
2. 进入Activity源码分析
android.app.Activity[code] @Override //入口 public void startActivity(Intent intent) { this.startActivity(intent, null); }
….省略代码…
[code] @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); } }
….省略代码…
[code] public void startActivityForResult(Intent intent, int requestCode) { startActivityForResult(intent, requestCode, null); }
最终到
startActivityForResult(intent, requestCode, null);方法处理
[code] 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待续…
相关文章推荐
- ActiveAndroid 不能自动建表
- Android应用程序:简单拨号器
- 高仿知乎日报(一)
- android:ToolBar详解
- [Android][Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法
- [Android][Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法
- [Android][Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法
- 五步搞定Android开发环境部署
- Handler概念详解
- Android4.3 蓝牙BLE初步
- Android 开发之 DishesView自定义点菜控件
- Android-Universal-Image-Loaderde 图片异步加载并缓存
- Android学习笔记
- Android MVVM框架RoboBinding初探
- Android之Inflate()方法用途
- Android实例-使用电话拨号器在移动设备上(官方)(XE8+小米2)
- 【Android进阶篇】Fragment的两种加载方式
- android与js交互(一)
- 【Android源码解析】 自定义可清除的输入框
- AsyncTask执行顺序