【Android基础】Activity深入理解(一)——Activity生命周期

Activity是Android应用的重要且最常见的组件。一个应用中往往包含了多个Activity组件,不同的Activity分别会向用户呈现不同的操作界面。当用户进入,退出,回到你的App时,程序中的Activity实例都经历了声明周期中的不同状态。下面笔者就介绍一下Activity中重要一些回调方法。

Activity生命周期重要的回调方法

在Java和C++中,程序的入口是main()方法,但是在Android中,系统会根据Activity的生命周期的不同阶段唤起对应的回调函数来执行代码。系统存在一套如下的有序的回调函数来启动和销毁一个Activity。
LifeCycle
上面的图片是Android Dev Guide提供的一个金字塔模型。
在一个Activity的生命周期中,系统会像金字塔模型一样去调用一系列的生命周期的回调方法。当创建一个新的Activity实例,每一个回调函数都会向上一层移动Activity的状态,当移动到顶层的时候,就意味着这个Activity处于可以与用户进行交互的状态;当用户退出这个Activity时,系统会调用相应的方法将Activity向下一层移动它的状态。使Activity处于等待状态(例如当用户切换到了其他的App中),这时Activity可以被重新唤醒(重新回到顶端)。
下面就来依次介绍一下这些回调方法:

  • onCreate:当Activity第一次启动的时候触发该方法,可以在此时完成Activity的初始化工作。
  • onStart:该方法的触发表示属的Activity将被展现给用户。
  • onResume:当一个Activity和用户发生交互时触发该方法。
  • onPause:当一个处于前台的Activity(与用户进行交互的Activity)因为其他的Activity的需要而转入后台运行时触发该方法。
  • onStop:当一个Activity不需要再展示给用户时触发该方法。但是有些时候系统会直接结束掉这个Activity而不会调用onStop方法,例如内纯紧张的时候。所以对于开发者而言,保存Activity信息的操作应该在onPause中进行操作。
  • onRestart:当处于停止状态的Activity需要再次展现给用户时触发该方法。
  • onDestory:当Activity销毁时触发该方法。类似于onStop方法,如果内存紧张,系统会直接结束Acctivity而不调用该方法。
    另外在Android Dev Guide中特别指出:

(译)根据Activity的复杂度,你也许不需要实现所有的生命周期方法。然而,你需要知道每一个方法的功能并确保你的App能够像用户期望的那样执行。如何实现一个符合用户期待的App,你需要注意下面几点:

  • 当使用你的App的时候,不会因为有来电通话或者切换到其他App而导致程序崩溃。
  • 当用户没有激活某个组件的时候不要消耗宝贵的系统资源。
  • 当离开你的App并且一段时间后返回,不要丢失用户的使用进度。
  • 当设备发送屏幕旋转的时候,不会崩溃或者丢失用户的使用进度
    如果没有特别的指定,那么如果配置发生了改变(屏幕的旋转,语言的变更等等)将会导致当前的Activity经历一个正常的生命销毁的过程(onPause->onStop->onDestory)。如果一个正在和用户交互的Activity的实例的onDestory方法被调用了,之后再重新启动的该Activity实例,那么之前实例的所有savedInstanceState都会从 onSaveInstanceState(Bundle)方法中获取。
    下面我们通过一个小实例来体会Activity的生命周期。代码详见AndroidLifeCycleTest
    在实例中我们创建了两个Activity(MainActivity和AnotherActivity)。并且都调用了上述的七个回调方法。运行实例然后观察控制台输出我们可以得出以下几点:
  • 当一个Activity被创建的时候,首先触发了onCreate方法,紧接着执行onStart和onResume方法。
  • 当Activity在与用户交互时,用户点击了Home键或者进入到其他的Activity时,程序会调用onPause方法和onStop方法。此时用户再返回该Activity,系统会调用onRestart,onStart,onResume方法。
  • 如果用户按返回键,系统会调用onPause,onStop,onDestroy方法。
    以上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值