本文是读了《Android 群英传》第八章--Activity和Activity调用栈--之后的读书笔记,详情见书。

        Activity算得上是Android里最常见也最重要的组件了,一般情况下都被翻译为“活动”,但实际上我一直都是把它理解为“界面”,毕竟在Android四大组件里,只有Activity是和view直接进行交互的。从一开始学习接触Android开始,接触的第一行代码就是有关Activity的,所以看看书整理记录一下。

        一、起源

        Activity是与用户交互的第一窗口,当开发者创建了一个Activity之后,可以通过setContentView()方法来给Activity关联一个显示界面,并以此为基础提供给用户进行交互。

        二、Activity的生命周期和状态

     Activity的生命周期图非常常见,选择了Android 100网上的图如下所示:


       对于生命周期的状态,描述的文章很多,就不一一叙述了。

       根据这个生命周期可以得到一个Activity的状态有以下四种:

       ①Active。活跃的状态,即在onResume()以后Activity处于前台可视化,整个Activity最顶层的状态,可以和用户直接进行交流;

       ②Pause。暂停的状态,当一个Activity被另一个新的非全屏的或者透明的Activity覆盖时候,此时该Activity是去焦点,暂时失去了和用户交流的能力,但是其状态、变量等都还保留着。

       ③Stop。结束的状态,当一个Activity被另一个全屏的非透明Activity完全覆盖时候的状态,此时该Activity已经不可见了,但是状态还保留着。

       ④killed。销毁的状态,当一个Activity被系统回收或者人为关闭后的状态,此时Activity已经关闭。 

       上面四种状态结合Activity的生命周期来看,我们可以发现,一个运行着的Activity比较稳当的生命周期状态有三个:onResume(),onPause(),onStop()。其他的生命周期都只是过渡的周期,很多就会进入下一个状态。

        

      三、Activity的生命周期分析。 

      根据生命周期图,可以把Activity的生命周期分为四个过程。

       1.Activity的启动和销毁过程

       生命周期里的onCreat()方法是创建基本的UI元素,通过setContentView()方法关联上相关View。在执行完了onCreat()方法后会马上执行onStart()方法,执行以后Activity其实就处于个可视化的状态了,但是还是没显示到前台,无法和用户进行交互。当执行完了onResume()方法后Activity就会处于活跃状态可以和用户交互了。

       而当一个Activity执行了onDestory()方法后,Activity里的资源会被销毁,Activity处于killed状态,一个生命周期结束。


       2.Activity的暂停和恢复过程

       当处于栈顶的Activity部分不可见时候,系统会执行onPause()方法,释放掉系统资源,比如Camera、sensor、receivers,使Activity处于一个暂停的状态。

       当结束组赛后,就会调用onResume()方法,重新初始化在onPause()中被释放的资源,使Activity恢复到active状态。


       3.Activity的结束过程

       当处于栈顶的Activity由部分不可见变为完全不可见时候,系统会执行onStop()方法,此时该Activity不再处于前台,栈顶位置被其他Activity替代。

       如果此Activity要重新回到前台,会经历如下的声明周期:onRestart()----onStart()----onResume()。


       4.Activity的重新创建过程

       当一个Activity长期处于Stop的状态时候,系统就有可能回收这个Activity,此时系统会将该Activity的状态通过onSaveInstanceState()方法保存在Bundle对象里,当需要恢复这个Activity时候,可以调用OnRestoreInstanceState()方法与onCreat()方法获取到这个参数----Bundle savedInstanceState。如图所示:


       不过如果用户用finish()方法结束Activity,系统不会自动执行onSaveInstanceState()方法。

        

更多相关文章

  1. android 抗锯齿效果
  2. Android(安卓)IPC机制(二)Binder的工作机制
  3. android中退出当前应用程序的四种方法
  4. Android中使用SAX方式解析XML文件
  5. Activity的生命周期
  6. 获取Android(安卓)SDK 源代码并在Eclipse中关联查看的方法(for s
  7. 实用Android(安卓)studio gradle的离线安装方法(官方)
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. 【Android(安卓)开发教程】使用数据库
  2. Android 线程完全解析
  3. Android抽奖小程序
  4. Android事件总线(四)源码解析otto
  5. Android 指定Dex分包的Gradle插件
  6. android 解决依赖冲突
  7. Android初探:GeoQuiz学习
  8. Android魔法系列大全(不定时更新)
  9. Android studio 开发实战笔记----(一)开发
  10. Android整体印象