zoukankan      html  css  js  c++  java
  • Activity 的生命周期与加载模式

      当Activity 处于Android 应用中运行时,它的活动状态由 Android 以 Activity 栈的形式管理。当前活动的Activity位于栈顶。随着不同应用的运行,每个Activity都有可能从活动状态转入非活动状态,也可能从非活动状态转入活动状态。

      Activity 的生命周期

      归纳起来 Activity 大致会经过如下4个状态:

        1、活动状态:当前Activity位于前台,用户可见,可以获得焦点

        2、暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点。

        3、停止状态:该Activity不可见,失去焦点。

        4、销毁状态:该Activity结束或Activity所在的Dalvlik进程被结束。

              

      从上图中可以看出,在Activity的生命周期中,如下方法会被系统回调。

        1、onCreate(Bundle savedInstanceState):创建Activity时被回调。该方法只能被调用一次。

        2、onStart():启动Activity时被回调。

        3、onRestart():重新启动Activity时被回调。

        4、onResume():恢复Activity时被回调,onStart()方法后一定会回调onResume()方法。

        5、onPause():暂停Activity时被回调。

        6、onStop():停止Activity时被回调。

        7、onDestroy():销毁Activity时被回调。该方法只会被调用一次。

      开发Activity时也可根据需要选择性的覆盖指定方法。其中最常见的就是覆盖onCreate(Bundle savedInstanceState)方法,该方法用于对该Activity执行初始化。除此之位,覆盖onPause()方法也很常见:比如用户正在玩一个游戏,此时又电话进来,那么我们需要将当前(游戏)暂停,并保存该游戏的进行状态,这就可以覆盖onPause()方法来实现。接下来当用户再次切换到游戏状态时,onResume()方法已经会被回调,因此可以通过重写onResume()方法来恢复游戏状态。

      Activity 的4种加载模式

      在AndroidManifest.XML中配置Activity时可指定android:launchMode属性,该属性用于配置该Activity的加载模式,该属性支持如下4个属性值:

        1、standard:标准模式,这是默认的加载模式

        2、singleTop:Task顶单例模式。

        3、singleTask:Task内单例模式。

        4、singleInstance:全局单例模式。

      在介绍Activity的加载模式之前,先介绍Android对Activity的管理:Android采用Task来管理多个Activity,当我们启动一个应用时,Android就会为之创建一个Task,然会启动这个应用的入口Activity(即<intent-filter.../>中配置为MAIN和LAUNCHER的Activity)。

      Android的Task是一个有点麻烦的概念——因为Android并没有为Task提供API,因此开发者无法真正去访问Task,只能调用Activity的getTaskId()方法来获取它所在的Task的ID。事实上我们可以把Task理解成Activity栈,Task以栈的形式来管理Activity:先启动的Activity被放在Task栈底,后启动的Activity被放在Task栈顶。

      那么Activity的加载模式,就负责管理实例化、加载Activity的方法、并可以控制Activity与Task之间的价值关系。

      详细介绍这4种加载模式

      1、standard模式

        每次通过这种模式来启动目标Activity时,Android总会为目标Activity创建一个新的实例,并将该Activity添加到当前的Task栈中——这种模式不会启动新的Task,新Activity将被添加到原有的Task中。

      2、singleTop模式

        这种模式与 standard 模式基本相似,但有一点不同:当将要被启动的目标Activity已经位于Task栈顶时,系统不会重新创建目标Activity的实例,而是直接服用已有的Activity实例。

      3、singleTask模式

        采用赭红加载模式的Activity在用一个Task内只有一个实例,当系统采用singleTask模式启动目标Activity时,可分为如下三种情况:

          3.1、如果将要启动的目标Activity不存在,系统将会创建目标Activity的实例,并将它加入Task栈顶。

          3.2、如果将要启动的目标Activity已经位于Task栈顶,此时与singleTop模式的行为相同。

          3.3、如果将要启动的目标Activity已经存在,但没有位于Task栈顶,系统将会把位于该Activity上面的所有Activity移除Task栈,从而使得目标Activity转入栈顶。

      4、singleInstance模式

        这种加载模式下,系统保证无论从那个Task中启动目标Activity,只会创建一个目标Activity实例,并会使用一个全新的Task栈来装载该Activity实例。

        当系统采用singleInstance模式启动目标Activity时,可分为如下两种情况:

          4.1、如果将要启动的目标Activity不存在,系统会先创建一个全新的Task、再创建模板Activity的实例,并将它加入新的Task的栈顶。

          4.2、如果将要启动的目标Activity已经存在,无论它位于哪个应用程序中,无论它位于哪个Task中,系统将会把该Activity所在的Task转到前台,从而使用该Activity显示出来。

  • 相关阅读:
    Python 基础知识----数据类型
    drf 之序列化组件
    Django Rest framework 框架之解析器
    css选择器
    Python 爬虫 解析库的使用 --- Beautiful Soup
    Python 爬虫 解析库的使用 --- XPath
    动态渲染页面爬取(Python 网络爬虫) ---Selenium的使用
    HDU 1014(互质数 **)
    HDU 6432(不连续环排列 ~)
    HDU 6433(2的n次方 **)
  • 原文地址:https://www.cnblogs.com/haoxiaozhang/p/5254715.html
Copyright © 2011-2022 走看看