Android Activity生命周期及启动模式

  曾经搞过许多东西,再熟练的东西一段时间没有碰都会生疏或忘记。后来体会到写成文档记录下来的重要性,但有些word或ppt记录下来的东西随着时间流逝会丢失,或者不愿去看。或许保存成博客的形式,会是更好的选择,勉励自己。

  Activiy是Android开发中最常用最常见的组件,是Android开发人员开始学习首先接触的组件,也是大部分人建立一个工程后,首先要处理的可能就是Activity。这么重要、常用、简单、易上手的组件,牢固掌握其基础知识,对于开发人员是非常重要的。本文会首先解释其基本概念,对于其使用方式不做过多赘述,重点放在Activity的生命周期和启动模式上,附带讲解一些Activity管理的经验。

1 Activity的概念

  官方解释“An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map.”(https://developer.android.google.cn/reference/android/app/package-summary)中文含义是"Activity 是一个提供带屏交互应用程序的组件,例如拨打手机,拍照,发邮件,或看地图。"也就是说,Activity是屏幕交互View的容器,是用户通过屏幕操控程序的入口。

2 Activity的基本使用

  一般Activity和一个Layout布局文件配合使用。创建一个继承android.app.Activity的java类和一个放在"/res/layout"文件夹下的xml布局文件。然后在Activity的onCreate方法中,使用setContentView方法,制定layout的resourceID。这里不做展开。

3 Activity的生命周期

3.1Activity的运行状态

作为与用户交互位目的的组件。在启动后会有四种状态。

1,Active或者Running,是指Activity处于前端,获取了前台焦点的状态,此时Activity位于活动栈的栈顶。

2,paused,是指Activity处于可见状态,但是丧失了前台焦点。例如:被透明的Activity遮挡,设备转入休眠等。Android的通知栏不会导致Activity  进入paused状态。

3,stopped,当Activity对用户不可见时进入stopped状态,但此时仍保持已有的状态和成员信息,等等系统判断恢复运行状态,或者销毁。此时,如果系统内存不足,Activity占用的资源有可能被释放。

4,destroyed,Activity被系统回收,内存释放。此时Activity会从活动栈中移除。

  3.2 Activity的生命周期回调

    Android对Activity定义了7个生命周期的回调,对应Activity的创建和四种运行状态的切换。分别是:    

      • onCreate()
      • onStart()
      • onResume()
      • onPause()
      • onStop()
      • onDestroy()
      • onRestart()

    官网给出的生命周期回调流程图为:

  结合上一部分解释的Activity的四种运行状态,我绘制了一个简单的生命周期流程图。如下:

  结合代码来看(相关代码会在本文最后作为附件给出)。Activity启动到绘制完毕,调用的生命周期为:

如果此时按了home键,Activity进入后台,调用的生命周期为:

再次唤醒Activity,调用的生命周期为:

结束当前Activity,调用的生命周期为:

在启动Activity后,如果切换了屏幕方向,会导致当前Activity销毁并重绘。如果想取消屏幕切换时Activity的销毁重绘,对于Android3.2之前(不含),可以在manifest文件中设置当前Activity的android:configChanges=”orientation|keyboardHidden”,对于Android3.2及之后的sdk,可以设置android:configChanges=”orientation|keyboardHidden|screenSize“。详见博客https://blog.csdn.net/u014070729/article/details/50867646

4 Activity的启动模式

  Activity的启动模式有四种:standard.singleTop. SingleTask. singleInstance。如果不在配置文件中做任何设置,将以standard模式启动。

1,standard模式

  顾名思义,standard模式就是默认的标准启动模式。在这种模式下,每次启动当前Activity,就会在任务栈中创建一个当前Activity的实例。如果当前Activity多次连续启动,则按返回键时,也会依次唤起已经入栈的Activity实例,表现出退出多个当前Activity的现象。

2,singleTop模式

  singleTop模式与standard模式的唯一区别是:如果要求调用Activity时,如果当前任务栈的栈顶已经时当前Activity的实例,则不会重复创建。因此,不会再调用onCreate(),onStart(),onResume()的生命周期,但是可以调用onNewIntent()回调,我们可以再这里做一些数据处理。应用场景:注册,登录,避免多次点击产生bug。

3,singleTask模式

  使用singleTask模式,如果调用Activity时,当前任务栈的栈顶已经时该Activity的实例,则singleTask模式与singleTop模式一致。如果当前任务栈中没有Activity的实例,则会产生一个新的实例并置入栈顶。如果任务栈的下层有Activity的实例,则会把实例之上的所有其他Activity的实例全部出栈,使该Activity实例置于栈顶;表现上则是,该Activity第一次被调用后,调用的其他Activity,不能通过返回键返回到了。应用场景:适合作为程序入口点,例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面

4,singleInstance模式

  使用singleInstance模式,则会为当前Activity创建一个新的任务栈,并将产生的实例置入,其他Activity的实例不会置入。当在该实例下按返回键时,任务栈会销毁。由于涉及到任务栈的切换,所有这种模式下的切换市场和资源销毁比其他模式要大。这种模式一般应用与Activity与多个应用共享该Activity的情形,比如Launcher,从其他任何应用返回到Launcher,都可以保持是同一个单例。

5 Activity互相调用时的生命周期

  当Activity1中调用Activity2时,Activity1的实例首先会调用onPause回调。然后Activity2创建新的实例(或者依据启动模式不同,从栈内调起),依次调用onCreate(),onStart(),onResume()等回调,然后Activity1调用onStop()回调。如果Activity2是从栈内调起,则其依次调用onRestart(),onStart(),onResume()回调。如果Activity1需要出栈,则其在调用onStop()回调后会调用onDestroy()回调。

基本流程如图:

结合代码来看,生命周期如下:

6 总结

  本节总结了Activity的4中运行状态,基本生命周期,和启动模式。文中demo代码见附件。

https://files.cnblogs.com/files/acesui/ActivityDemo.rar

原文地址:https://www.cnblogs.com/acesui/p/9643097.html

时间: 2024-10-13 20:13:10

Android Activity生命周期及启动模式的相关文章

Android Activity生命周期与启动模式

Activity的完整生命周期如下图: Activity的加载模式有四种: standard: 标准模式,默认的加载模式,每次通过这种模式启动目标Acitivity,都创建一个新的实例,并将该Activity添加到当前栈中. singleTop: 与标准模式类似,只有当Activity位于Task顶时,系统不会重新创建目标Activity的示例,而是直接复用已有的Activity实例. singleTask: 如果要启动的Activity不存在,系统创建Activity实例,并将它加入栈顶 如果

Activity生命周期以及启动模式对生命周期的影响

前天用户体验反馈的一个需求,要求每次进入应用都定位到首页;这个操作很明显不适合放在首页Activity(启动模式为SingleTask)的onResume中,如果对Activity的启动模式和生命周期熟悉,那么很容易想到在onNewIntent里操作就可以了,这样在应用内跳转不至于每次都定位到首页. 可见,对Activity生命周期和启动模式进行一下梳理很有必要.下面主要描述一下Activty的生命周期,以及launchMode对生命周期的影响,onNewIntent,onSaveInstanc

Activity生命周期和启动模式

Activity正常情况下的生命周期: 1.   一个Activity的正常启动: onCreate --> onStart --> onResume 2.   A(Activity)打开新的B(Activity)或者用户按住Home键切换到主界面,当前Activity所调用的方法:  onPause  -->  onStop 3.   此时在重新回到A(Activity)所调用的方法:  onRestart  -->  onStart  -->  onResume 4,  

Android03-Activity生命周期及启动模式

1.返回栈概念 2.生命周期 1. onCreate() 这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动 第一次被创建的时候调用.你应该在这个方法中完成活动的初始化操作,比如说加载布 局.绑定事件等. 2.onStart() 这个方法在活动由不可见变为可见的时候调用. 3.onResume() 这个方法在活动准备好和用户进行交互的时候调用.此时的活动一定位于返回栈的栈顶,并且处于运行状态. 4. onPause() 这个方法在系统准备去启动或者恢复另一个活动的时候调用.

Activity生命周期以及启动模式对生命周期的影响(二)

前面一篇文章概述了Android四大组件之一的Activity生命周期方法的调用先后顺序,但对于非标准启动模式下Activity被多次调用时的一些生命周期方法并未详细阐述,现在针对该情况着重记录. 现象 发布会demo中出现了这样的一种现象:当界面即将出现时,语音重复唤起该界面时,由于在onPause中调用了finish(),界面一直未显示出来,这不是我们想要的. 分析 由于系统组这边存在的一个bug,全屏的Activity出现时会带起在后台运行的应用界面,所以我们这边的Activity不得不采

Android开发艺术探索——第一章:Activity的生命周期和启动模式

Android开发艺术探索--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activity搬上来了,也确实,和Activity打交道的次数基本上是最多的,而且他的内容和知识点也是很多的,非常值得我们优先把他掌握,Activity中文翻译过来就是"活动"的意思,但是主席觉得这样翻译有些生硬,直接翻译成"界面"可能更好,的确,Activity主要也是用于UI效

Android开发艺术探索(一)——Activity的生命周期和启动模式

Activity的生命周期和启动模式 生命周期有? 1.典型情况下的生命周期—>指有用户参与的情况下,Activity所经过的生命周期改变 2.异常情况下的生命周期—>指Activity被系统回收或者由于当前设备的configuration发生改变而导致Activity被销毁重建 1.1 典型生命周期分析 旧活动的OnPause先调用,新Activity才启动 异常分析: 1.资源相关的系统配置发生改变,导致Activity被杀死并重新创建 系统只在Activity导致终止的时候才会调用OnS

Activity生命周期+四种模式——枯燥重要(五)

Activity生命周期+四种模式 了解android系统的四大组件 掌握Activity的生命周期 LogCat的使用 Android系统有四个重要的组件,分别是 Activity Service BroadcastReceiver ContentProvider Activity是Android程序的呈现层,显示可视化的用户 界面,并接收与用户交互所产生的界面事件 Android应用程序可以包含一个或多个Activity,一般在 程序启动后会呈现一个Activity,用于提示用户程序已经 正

Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式。

Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags(); 一.Android Activity 四种启动模式 lunchMode 在Manifest 配置文件中的属性如下: (1) android:launchMode="standard" (2)android:launchMode="singleTop" (3)android:launchMode="singleTask" (4)andro