Activity 启动过程--学习

4种activity的启动模式

standard: 标准模式,一调用startActivity()方法就会产生一个新的实例。

singleTop: 如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。

如果不位于栈顶,会产生一个新的实例。singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。

singleTask: 会在一个新的task中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。singleTask适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。

singleInstance: 这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例。

singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。

http://mp.weixin.qq.com/s?__biz=MjM5NDkxMTgyNw==&mid=2653058030&idx=1&sn=d926905b72512cee1a339a14fe304e53&scene=4#wechat_redirect

如果指定了一个Activity的启动模式是singleTop的那就应该既要重写onCreated()方法用于应对第一次创建的情况,也要重写onNewIntent( )方法来应对重复创建的情况

———————————————————————————————————————————————————————————————————————————————————————————–

首先从startActivityForResult方法开始分析

ApplicationThread是ActivityThread的一个内部类

我们来看Instrumentation的execStartActivity方法

启动activity的实现最终是由ActivityManagerNative.getDefault()的startActivity方法来完成;

ActivityManagerService继承ActivityManagerNative.而ActivityManagerNative继承于Binder并实现了IActivityManager这个Binder接口因此AMS也是一个Binder;它是IActivityManager的具体实现;

Activity是由ActivityManagerNative.getDefault()来启动而ActivityManagerNative.getDefault()实际上是AMS

因此Activity的启动又转移到了AMS中;那么来看AMS的startActivity方法

接着看Instrumentation的execStartActivity方法其中有一个checkStartActivityResult方法

checkStartActivityResult的作用检查Activity的启动结果;

Activity的启动过程又转移到了ActivityStackSupervisor的startActivityMayWait方法中

ActivityStackSupervisor转移到了ActivityStack中

HandlerH对消息的处理

ActivityThread的handlerLaunchAcitivity方法来实现内部有一个performLaunchActivity方法

performLaunchActivity方法主要完成了这几件事情

1.ActivityClientRecord中获取启动Activity组件的信息;

2.通过Instrumentation的newActivity方法来使用类加载器来创建Activity对象

3.通过LoadApk的makeApplication方法来创建Application对象;

4.创建ContextImpl对象并通过Activity的attach方法来完成一些重要数据的初始化;

5。调用Activity的onCreate方法;

《Activity 启动过程--学习》

    原文作者:Kevin_Curry
    原文地址: https://www.jianshu.com/p/4c59e3b23c6a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞