Activity生命周期、启动模式和工作过程

Activity生命周期、加载模式和工作过程

说好的一周两篇还是被连着加班没实现,囧- -!  马上要离职了,要赶紧总结了,今天通过平常的了解和查阅资料,总结了Android开发中最重要的组件---Activity

Activity是用来与用户进行交互的界面,一个app给用户的所有功能都是通过它展现给用户的,很重要!!!

 Activty的生命周期:

(1)onCreate:activity正在被创建,第一个方法可以进行初始化工作、如加载布局文件

(2)onStart:activity正在启动,当前已经可见但是没有焦点不能进行交互。

(3)onResume:activity已经可见显示到前台可以进行交互这时候如果用户打开新的activity或home,回调onPause-》onStop。

(4)onPause:activity正在停止
(5)onStop:activity即将停止,返回调用onRestart,回到onStart

(6)onDestory:当前Activity销毁

(7)onRestart:在onStop中返回activity调用onRestart,回到onStart




当activity异常情况下销毁并重新创建,比如内存不足后台activity被杀死,横竖屏切换等,在onStop之前系统会调用onSavaInstance方法来保存当前activity的状态数据,它可能在onPause之前也可能是之后 。当系统重新创建activity,系统会调用oncreate、onStart之后onRestoreInstanceState方法把之前保存的状态数据Bundle对象作为参数传递给RestoreInstanceState和onCreate进行重建。


Activity的启动模式:

(1)standard 标准模式也是Activity的默认启动模式,每次启动activity都会创建一个实例,谁启动了activit那它就会运行在启动它的所在哪个栈里。

(2)singleTop: 栈顶复用模式,如果activity已经位于任务栈的栈顶不会被重新创建,同时它的onNewIntent方法会被回调,可以通过这个方法的参数取出当前的请求信息。

(3)singleTask:栈内复用模式,单实例模式,只要栈内存在这个activity多次启动都不会重新创建实例。

(4)singleInstance:单实例模式,加强的栈内复用模式就是activity单独位于一个任务栈内。

activity跳转返回保存状态信息,一般保存是在onPause()回调方法中进行。 也可以调用startActivityforResult()方法把将状态信息通过setResult()返回给原来的,比如音乐播放器中在onActivityResult()中继续播放。


Activity的工作过程

Activity的方式最常见无非是startActivity方法,这个方法有好几个重载方式。但是最终都会调用sartActivityForResult()。通过判断mParent != null来启动。mParent代表ActivityGroup  API 13已经被废弃了,用fragment来代替。

    接着调用Instrumention的execStartActivity(),可以发现Activity的启动实际上是由ActivityManagerService(AMS)完成的。ams继承自amNative,AMS也是一个    binder对象它采用的是单例模式对外提供。最终是AMS的startActivity()方法执行

    instrumention的execStartActivity方法中有以个checkActivityResult检查启动Activity的结果,如果无法正确启动就会抛出异常信息。

    AMS的startActivity()中有调用了ActivityStackSupervisor的StartActvityMayWait接着七转八转到ActivityStack中的resumeTopActivity方法中。IApplicationThread这个Binder接口的实现者完成了大量的Activity和service的启动和停止相关的功能。在转转的,到ApplicationThread调用schedleLaunchActivity方法来启动,这个方法很简单就是发送了一个启动activity的消息给Handler H处理。performLaunchActivity最终完成了Activity的创建和启动。这个方法是如何工作的呢?

    1,获取需要被启动的Activity的组件信息  2,通过Instrumentation的newActivity方法使用类加载器创建对象 3,通过LoadedApk的makeApplication创建application对象  4,通过contextImpl对象的attach方法完成一些重要数据的初始化  contextImpl很重要它是context的具体实现,在attch中会完成window的创建并关联。
    5,最后调用onCreate方法完成创建  (呼呼呼呼   出一下气————————)











                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值