Android学习之 Activity 生命周期(LifeCycle)

在Android,系统把Activities当做一个Activity Stack进行管理。当一个新的Activity被启动时,它将放在这个Activity Stack的最顶部,然后成为一个Running Activity. 而上一个Activity总是在这个Activity的下一层,且将不会再显示到前端直到一个新的Activity存在!
  一个Activity本质上来说包括以下四个状态:
  1. 当一个Activity在屏幕的前台(foreground)时(同时也在Activity Stack的顶部)时,这个Activity就处在active或running状态。
  2. 当一个Activity失去了焦点,但是可见(例如:一个新的不是全屏的activity处于Activity Stack顶部)时,Activity处理Paused状态. 一个被Paused的Activity是完全可用的(alive)(这时的Activity将保存所有的状态与成员信息且仍处理Window manager 的attach范围), 这种状态下的Activity在系统极度缺少内存的情况下被系统杀掉!
  3. 如果一个Activity完全被另一个Activity覆盖时,该Activity就处理Stoped状态。它将仍然保存所有状态与成员信息,但是,它对用户已经不在可见,所以,它的窗口被隐藏了。当系统需要内存时,系统会经常杀掉这种状态的Activity。
  4.当一个activity处理paused或stopped状态时,系统可以清除这个activity的内存而不调用这个activity的finish方法或者简单的结束它的进程,当它被再次显示给用户,它需要再次完全启动,并还原到最近的一状态。
  下面所说的方法可以理解为Activity进入对应状态时会被调用的方法!
  下面的一张图说明了Activity的状态变化路线图。长方形表示你可以覆盖这些方法,以便在Activity状态切换之间执行一定的动作。含有颜色的椭圆表示Activity可能经常处于的状态!


  下面是三个在你控制或监控(monitoring)Activity过程中比较重要的三个循环:
  1. 全个生命期(The entire lifetime). 这个生命周期发生在第一调用onCreate(Bundle)方法到最终的对onDestroy()的调用。一个Acitivity可以在onCreate()方法中对全局的状态进行初始化,在onDestroy中释放所有用到的资源。例如:如果需要一个后台运行的从网络中下载数据的线程,那么可以在onCreate()函数中进行创建,在onDestroy()中停止。
  2. 可视生命期(visible lifetime). 这个生命期从调用onStart()方法开始到调用onStop()函数结束。在该生命期中,用户可以在屏幕上看到这个activity,尽管他可能不在前台,不能与用户进行交互,在这个生命期中,你可以维护那些你要显示给用户看的数据。例如:为了监控所有可以对你的UI产生影响的消息,你可以在onStart()函数中注册一个BroadcastReceiver,然后当用户不能看到你所要显示的信息,在onStop()函数中反注册它。onStart()与onStop()方法可以被调用多次。
  3. 前台生命期(foreground lifetime).前台生命期从onResume()到onPause()。在这期间,这个activity在其他activity的前面,且正在与用户进行交互。一个activity可以很频繁的在Resumed与Paused状态之间进行切换。例如当设备Sleep时、一个Activity result被传递时、一个新的Intent被传递时等。所以,运行在这期间的代码必须时快速轻量级的。
  一个activity的整个生命周期定义在下面的activity方法中。你可以覆盖这些方法,使得activity在不同状态之间执行一定的动作。所有的activities都将实现onCreate(Bundle)方法去完成初始化设置工作,在实现这些方法的过程中,你需要经常调用这些方法的superclass.
  01 public class Activity extends ApplicationContext {
  02      protected void onCreate(Bundle savedInstanceState);
  03
  04      protected void onStart();
  05
  06      protected void onRestart();
  07
  08      protected void onResume();
  09
  10      protected void onPause();
  11
  12      protected void onStop();
  13
  14      protected void onDestroy();
  15  }
  Most importantly, any changes made by the user should at this point be committed (usually to the ContentProvider holding the data).
  重要一点:用户操作的变化都应该在这时进行保存!通常使用ContentProvider进行保存!

 

 

启动

 

onCreate

onStart

onResume

 

 

back键

 

onPause

onStop

onDestroy

 

 

 

home键

 

onSaveInstanceState

onPause

onStop

 

home键后启动程序

 

onRestart

onStart

onResume

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值