关闭

Activity生命周期详解

273人阅读 评论(0) 收藏 举报
分类:

Activity是什么?

Activity是用户和应用程序交互的界面,用户可以在Activity上进行点击、滚动、触摸等操作。一般来说,一个应用是由多个Activity组成,首次进入的Activity称为主Activity。至于如何判断一个Activity是不是主Activity。本篇文章我们先不讨论。后面会讲到。

Activity的活动状态

当我查阅关于Activity的官方文档的时候,我发现,官方文档中谈到Activity有三种状态,运行中、暂停、停止。我觉得少了一个销毁。所以这边我简单介绍一下Activity的四种活动状态。

  • 运行中(running)
    此acitvity位于前台,并且用户可以在activity中执行触摸、点击、滚动等操作。
  • 暂停(paused)
    activity可见,但并不可以操作,比如,当一个弹窗弹出来的时候。
  • 停止(stopped)
    activity不可见,一般来说当用户按了home键之后。如果系统内存不够的时候,并且其他应用需要内存时,系统会回收已经停止的activity。
  • 销毁(destroy)
    activity不可见,一般处于这种状态的activity会被系统回收掉。

Activity的生命周期

首先我们先看下图解是怎么描述activity的生命周期的。

在正常情况下,Acitivity的生命周期会先后经历如下的生命周期:

1)onCreate:表示Activity正在被创建,一般来说,我们会在这个方法中设置布局以及一些数据的初始化。

2)onStart:表示Activity正在被启动,这个Activity已经可见,但并不是前台,这种情况下,我们无法操作这个Activity。

3)onResume:表示Activity已经可见并且位于前台了,此时,我们可以对当前的Activity进行操作。

4)onPasue:表示Activity暂停了,一般来说,执行到了这一步,后续会调用onStop方法。所以,在这边我们尽可能不要去执行耗时操作,因为这会影响新的Activity的显示。

5)onStop:表示Activity停止了,这边我们可以对一些数据进行回收。同样不能太耗时。

6)onDestroy:表示Activity即将销毁,这是Activity最后一个生命周期,同样,我们可以对一些数据进行回收。

7)onRestart:表示Activity正在被重启,这个方法一般只有在重启Activity的时候才被调用,比如,打开一个新的Activity然后在回退到当前的Activity。此方法便会被调用。

我们可以通过上述介绍以及图片,可以分析出一般Activity会有如下几种情况:

启动一个Activity:onCreate()–>onStart()–>onResume()。

按Home键之后或者重新打开一个Activity:onPause()–> onStop()(注:如果新的Activity是透明主题,当前Acitvity不会走onStop方法,例如dialog弹出的时候,当然,dialog关闭当前Activity会走onResume())。

重新启动一个Activity:onRestart()–>onStart()–>onResume()。

销毁一个Activity:onPasue()–>onStop()–>onDestroy()。

异常情况下Activity的生命周期

首先,我们需要什么情况算异常情况。最好的例子莫过于横竖屏切换,这种情况Activity会被销毁并且重建,一般来说,系统会调用onSaveInstanceState 方法进行数据的存储。然后通过调用onRestoreInstanceState进行数据的恢复。如果我们想知道当前activity是否被重建了。我们可以在onCreate中判断bundle是否为null或者重写onRestoreInstanceState方法。一般推荐使用后者,因为只有在重建的情况下,此方法才会被调用。

如果我们希望当系统配置参数发生改变时,当前Activity不会被重建应该怎么做呢?自然是有的,我们可以在Mainfest文件中为Activity配置configChanges属性。比如,我们想当屏幕切换的时候当前Activity不被重启。我们可以这样:

  android:configChanges="orientation|screenSize"

configChanges的选项有很多,这里我们常用的只有locale、orentation、keyboardHidden以及screenSize。(需要注意的是:screenSize这个属性比较特殊,minSdkVersion 和targetSdkVersion 低于13时,此选项不会导致activity重启。否则会导致activity重启。)

此时,我们可以通过重写此方法来进行一些特殊处理:

      @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
        }

Thanks

《Android开发艺术探索》

Android官方API文档

3
1
查看评论

Android:Activity——生命周期深入详解

一、生命周期全面分析Android活动默认运行在当前进程所拥有的栈中,前台可见的活动则在活动栈的最顶部。其他后台活动则在栈的里面,在正常的情况下(内存充足)其他的活动并没有被回收或者杀死,它们仍然存在于栈中保持着原来的状态。当前面的活动退出后,后面的活动就会搬到前台使得被用户可见。如果在非正常情况下...
  • woshimalingyi
  • woshimalingyi
  • 2016-03-23 13:34
  • 2876

详解Activity生命周期

什么事Activity生命周期 说到Activity的生命周期,相信只要是接触过Android的朋友都知道这是什么,简单来说,我们打开的每一个app,都是由多个Activity所构成的,而一个Activity都要经历从创建到销毁的生命过程,这期间又包含一系列不同的状态。 相比于其他的编程范式,and...
  • baidu_29400813
  • baidu_29400813
  • 2015-06-30 11:09
  • 93

activity生命周期详解

今天研究了一下android  activity的生命周期
  • u012797664
  • u012797664
  • 2014-10-27 10:50
  • 190

Activity 生命周期详细解释

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期, 切横屏时会执行一次,切竖屏时会执行两次 2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调 用各个生命周期,...
  • qq_34927117
  • qq_34927117
  • 2016-09-01 22:49
  • 722

activity生命周期 详解

activity状态保存 页面持久化 1.
  • LANG791534167
  • LANG791534167
  • 2014-08-13 21:20
  • 1152

Activity生命周期详解

原理图: 文字描述如下: Activity的作用: 起显示作用,他是用来和用户交互的。也是一个view的容器 1 完整的生命周期:  onCreate() --> onStart() --> onResume()   activiyt...
  • caihongshijie6
  • caihongshijie6
  • 2013-09-11 11:50
  • 1218

Activity生命周期的回调,你应该知道得更多!--Android源码剖析(上)

学习Android近一年,最近几天总算把Activity启动的生命周期回调流程走通了,因为所涉及的知识点太多,赶快做了笔记,不然过几天就忘了。 需要了解的几点概念和知识点: Instrumentation是执行application instrumentation代码的基类,这个类在任何applic...
  • yalinfendou
  • yalinfendou
  • 2015-07-16 11:31
  • 2746

我之 Android Activity生命周期

Activity生命周期
  • Garlic_You_Ruthless
  • Garlic_You_Ruthless
  • 2015-07-27 14:20
  • 1209

Android 监听各个Acitivity的生命周期

Android Application 监听Activity生命周期
  • csm_qz
  • csm_qz
  • 2016-03-21 15:23
  • 713

Activity生命周期交互设计思想和应用场景(附源码)

Activity生命周期交互设计思想 1.在多个Activity进行交互的时候,为什么要先暂停(onPause()方法)当前的Activity,执行新的Activity的onCreate()方法,onStart()方法,onResume()方法?答:比如当你正在一个页面(Activity)上看...
  • u014225510
  • u014225510
  • 2015-08-02 15:31
  • 677