Activity生命周期详解

Activity生命周期详解

1、Activity 生命周期

官网api中的activity生命周期图

  • onCreate():当activity第一次创建的时候,会执行这个方法。这个方法里应该完成一些静态的初始化工作,比如创建视图,绑定列表数据等。
  • onStart():当activity在可见状态之前会调用这个方法
  • onResume():当activity与用户交互之前调用次方法,这个时候该activity就是当前栈顶的activity。
  • onPause(): 当系统要进入到另一个activity时调用的函数。这个函数主要是用来提交一些没有保存的改变到持久化存储中,停止动画等消耗cpu的操作。并且这个函数执行必须要快,因为只有当这个函数执行完毕后,才会进行下一个acitivity的渲染。
  • onStop(): 当activity对用户不可见的时候,就会调用这个方法。当这个activity即将被消除或者其它activity已经展示在最上边时,会调用此方法。
  • onDestroy: 当activity被销毁之前调用的
    需要说明一点:上述方法中,在执行完前三个方法后,系统是不能强制销毁activity;但在后三个方法执行完毕后,当系统内存不足时,该activity可能被系统销毁。而作为三个方法中的第一个,onResume方法中应该完成数据的持久化存储工作,因为onStop及onDestroy可能得不到执行。但是正如上面所说,这些操作一定要快,否则会阻塞下一个activity的展示,从而影响到用户体验。
    当dialog类型的activity显示时,会执行当前activity的onPause方法,dialog消失后,执行onResume方法;当从activityA跳转到B时,执行A的onPause方法,在执行B的onCreate,onStart,onResume方法,然后执行A方法的onStop方法;如果此时点击返回键,由B回到A,则依次执行B的onPause方法,A的onRestart,onStart,onResume方法,B的onStop,onDestroy方法。

针对上述对生命的描述,可以从三个角度来对Activity的生命周期进行划分:
1. 完整的Activity的生命周期。即从onCreate到OnDestroy之间的整个过程。
2. 可见的Activity的生命周期。即从onStart到onStop之间的整个过程,在这个期间,Activity一直处于可见的状态中,会一直持有Activity展示所需的资源。可以在onStart中注册一个BroadcastReceiver来监听该Activity的UI变化,并在onStop中unregister这个监听。
3. 处于前台的Activity生命周期。即从onResume到onPause之间的整个过程。这段时间内,Activity会处于最前端,并且与用户进行交互。另外,由于这两个方法运行时间的长短,直接影响到界面的展示时间,影响到用户体验,所以这两个函数一定要快速执行完毕。

2、Activity的三种状态

针对上述对Activity生命周期的描述,可以得出Activity在整个生命周期中的三个主要状态:
1. Resumed状态,也可被称为running状态。指的是该Activity的onResume方法执行完成后的所处状态。这个状态下用户可与该Activity进行交互
2. Paused状态,指该Activity执行完onPause方法后到达的状态,此时Activity处于部分可见的状态,但是并不能与用户交互(上面有dialog)。
3. Stopped状态,指该Activity执行完onStop方法后到达的状态,此时Activity已经不可见
* 后两个状态下的Activity都可能被系统回收,而第一个状态下的Activity是不会被系统回收的。*

3、保存Activity的状态

当Activity没有被系统回收之前,Activity状态及资源信息会一直保存在内存中,当用户跳转到其它Activity或按home键回到桌面后,再回到该Activity时状态仍然存在。
但是当Activity被系统回收后,一些状态信息不会保存,比如用户输入到输入框的内容。此时,就需要通过手动保存状态信息,然后在重新开启该Activity时,将状态信息写入。首先,重写onSaveInstanceState()方法保存Activity的状态信息,该方法会在Activity异常关闭时执行;然后在onCreate或onRestoreInstanceState()方法中将状态信息复原。
需要说明的是,onSaveInstanceState方法并不一定会调用,当用户正常退出activity时,该方法是不会调用的;同时系统会自动的调用该方法,并对状态进行还原(尤其是UI状态),比如当app竖屏时,用户做了输入,然后横屏,此时Activity会先destroy然后onCreate,但此时用户的输入并不会丢失,就是因为系统会自动的进行状态保存。所以即使重写onSaveInstanceState方法,也要调用一下父类的该方法,保留系统的处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值