Activity的生命周期介绍

 (一)Activity的起源:      

    Activity是用户交互的第一接口,它提供了一个用户完成指令的窗口。当开发者创建Activity之后,通过setContentView(View)方法来给该Activity指定一个显示的界面,并以为基础提供给用户交互的接口。系统采用Activity栈的方式来管理Activity。

  (二)  Activity形态:

     Activity一个最大的特点就是拥有多种形态,它可以在多种形态间进行切换,以此来控制自己的生命周期。

Activity大致会经过如下4种状态:

      (1) 运行状态(Activt/Running): 此时Activity处于Activity栈的最顶层,用户可见,可以获得焦点,与用户进行交互。

       (2)暂停状态(Paused):当Activity失去焦点,被一个新的非全屏的Activity或者一个透明的Activity放置在栈顶时,Activity就转化为Paused形态。该Activity依然可见,但它失去了与用户交互的能力,所有状态信息,成员变量都还保持着,只有在系统内存极低的情况下,才会被系统回收掉。

        (3)停止状态(Stopped):如果一个Activity被另一个Activity完成覆盖,那么Activity就会进入Stopped状态。此时,它不在可见,但依然保持了所有状态信息和成员变量。

        (4)销毁状态(Killed):该Activity结束或Activity所在进程被结束。

(三)Activity的生命周期: 

               onCreate(Bundle savedStatus) :Activity已经被创建完毕

               onStart():Activity已经显示在屏幕,但没有得到焦点,就是还没有获得交互,点击组件是没有用的

              onResume():Activity得到焦点,可以与用户交互

              onPause():Activity失去焦点,无法再与用户交互,但依然可见

               onStop(): Activity不可见,进入后台

              onDestroy(): Activity被销毁

              onRestart(): Activity从不可见变成可见时会执行此方法

下图为Activity的生命周期

     


但其中只有三个状态时稳定的,替他状态都是过渡状态,很快就会结束。

      Resumed:就是前面说的运行形态,此时Activity出去Activity栈顶,处理用户的交互。

      Paused:当Activity的一部分被挡住的时候进入这个状态,这个状态下的Activity不会接收用户输入。

      Stopped:当Activity完成被覆盖时进入这个状态,此时Activity不可见,仅在后台运行。

   (3.1)Activity启动与销毁过程:整个流程如下图1,2,3

 

  在系统调用onCreate()之后,就会马上调用onStart(),然后继续调用onResume()以进入Resumed状态,最后就会停止Resumed状态,完成启动。系统会调用onDestroy()来结束一个Activity的生命周期让它回到销毁状态。

     onCreate(Bundle savedStatus):创建Activity时被回调,该方法只会被调用一次。创建基本的UI元素。

     onPause()与onStop():暂停Activity是被回调,停止Activity时被回调。 二者都是为了清除Activity的资源,避免浪费。

    onDestory(): 清除开启的线程。

 (3.2)Activity的暂停与恢复过程:过程下图1,2


   当栈顶的Activity部分不可见后,就会导致Activity进入Pause状态,此时就会调用onPause(),当结束阻塞后,就会调用onResume()来恢复到Resume形态。

     onPause():释放系统资源,如Camera,sensor,receivers。

     onResume():需要重新'初始化在onPause()中是释放的资源。

(3.3)Activity的停止过程

      栈顶的Activity部分不可见时,实际上后续会有两种可能,从部分不可见到可见,即是恢复过程;从部分不可见到完全不可见,即是停止过程。系统在当前Activity不可见的时候,总会调用onPause()方法。

     当一个Activity重新回到前台状态的时候,过程如下图1,2,3,4





(四) Activity的重新创建过程

     当你的系统上时间出于Stopped状态时而且此时系统需要更多内存或者系统内存极为紧张时,系统就会回收你的Activity,此时系统为了补偿你,会将Activity状态通过onSaveInstanceState()方法保存到Bundle对象中,当然你也可以增加额外的键值对存入Bundle对象以保存这些状态。当你需要重新创建这些Activity的时候,保存的Bundle对象就会传递到Activity的onRestoreInstanceState()方法与onCreate()方法中,这也是onCreate()方法中参数--Bundle saveInstandeState的来源。

     

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值