前言

四大组件对于Android开发者是老生常谈的知识了,相信每个Android开发者对四大组件都已经很熟悉了。但是四大组件作为Android应用的基础,作为开发者不仅要熟悉而且要烂熟于心。

这里以《重温Android四大组件》为题目是为了巩固自己的Android基础,加深对Android的认知。

Activity生命周期探索

Activity生命周期是Activity在不同场景下表现的一种状态,在Android开发中的表现就是提供给开发者的生命周期函数。使用Activity生命周期函数的目的就是定义Activity在不同时期的表现。下图是Android官方文档中提供的Activity生命周期函数回调。在这张图中可以看到Activity在各种场景中的状态变化。

  • onCreate() 表示Activity正在被创建。在系统首次创建时触发,并且onCreate在整个Activity生命周期中只触发一次。在onCreate中我们可以做一些初始化工作。

  • onStart() 表示Activity正在启动。此时Activity对用户可见,并且正在准备进入前台并且变得可交互。

  • onReStart() 表示Activity正在重新启动。一般来说Activity从后台回到前台时会调用onRestart方法。比如,用户点击home键将Activity放到后台,然后返回应用。

  • onResume() 表示Activity已经进入到前台,用户可以与Activity进行交互了。Activity将会停留在resume状态直到有其它事件发生时Activity失去焦点,比如说用户切换到其它Activity。

  • onPause() 表示Activity正在停止。也就是说某些事件发生导致用户正在离开当前Activity。在onPause方法中可以释放一些系统资源,比如传感器或者可能影响电池续航的一些行为。但是需要注意的时不能再onPause中作耗时操作,因为在启动其他Activity时,执行过当前Activity的onPause方法后才会执行新的Activity的onResume方法。

  • onStop() 表示Activity即将停止。此时Activity对用户已经是不可见的了,但是此时Activity对象依然在内存中。在onStop中可以做一些稍微重量级的操作,比如数据库操作、暂停动画或者处理一些对用户不可见的资源。

  • onDestroy() 表示Activity将要销毁。这是Activity生命周期中的最后一个回调函数。在onDestroy方法中需要释放所有资源。

Activity在不同场景中的生命周期状态

(1)Activity被启动并结束

触发条件:用户按下back键或者调用了Activity的finish方法。

这个简单的场景是最常出现的。这个场景可以归纳为:onCreate()->onStart()-onResume()->点击返回键->onPause()->onStop()->onDestroy()

(2)用户切换出当前应用

触发条件:用户按下HOME键或者在任务栏中切换到其它应用。

在这个场景中Activity被放到后台,但是并没有被销毁,Activity实例依然在内存中,如果系统没有回收进程,Activity实例会保有之前的状态。这个场景可以归纳为:onCreate()->onStart()-onResume()->点击HOME键->onPause()->onStop()->onSaveInstanceState()->返回应用->onRestart()->onStart()->onResume()

(3)系统配置变化

触发条件:比如:屏幕方向改变、键盘语言变化等。

在上述条件中,屏幕方向改变应该是最常见的现象。系统配置的改变会导致Activity的销毁以及重建。生命周期变化是:onCreate()->onStart()->onResume()->屏幕方向变化->onPause()->onStop()->onSaveInstanceState()->onDestory()->onCreate()->onStart()->onRestoreInstanceState()->onResume()。

可以看到在屏幕方向变化期间,Activity经历了销毁和重建两个过程。可以注意到在这期间有两个方法被调用到,它们分别是onSaveInstanceState和onRestoreInstanceState,这两个方法时用来恢复Activity状态使用的,通过Bundle传递参数。

在上面的情况中,由于Bundle无法传递大量的数据,开发者可以选择自己处理系统配置变化。在AndroidManifest.xml文件中改变Activity的配置。比如,处理屏幕方向改变可以加入配置:android:configChanges="orientation"。这个时候屏幕方向改变是就会调用onConfigurationChanged方法。此时的生命周期变化是:onCreate()->onStart()->onResume()->屏幕方向变化->onConfigurationChanged()。

可以看到,如果开发者自己处理系统配置改变,那么Activity就不会销毁重建了,而是直接调用onConfigurationChanged方法。

(4)启动模式对生命周期的影响

我们知道Activity有4中启动模式,分别是standard(标准模式)、singleTop(栈顶复用模式)、singleTask(栈内复用模式)、singleInstance(单实例模式)。启动模式不同也会导致Activity生命周期不同的变化。

  • standard(标准模式):标准模式下的Activity在每次启动时都会创建新的Activity实例,它的生命周期跟上面图中所示相差无几。

  • singleTop(栈顶复用模式):在这种模式下的Activity如果处于Activity栈栈顶,那么会复用Activity实例,启动的时候就会调用onNewIntent()->onRestart()->onStart()->onResume()。如果不是处于栈顶就会调用onCreate()->onRestart()->onStart()->onResume()。

  • singleTask(栈内复用模式):在这个模式下的Activity只要在Activity栈内存在实例就会复用这个实例,那个生命周期变化是:onNewIntent()->onRestart()->onStart()->onResume()。

  • singleInstance(单实例模式):在这种模式下Activity单独存在一个Activity栈中,启动调用onCreate()->onRestart()->onStart()->onResume()

通过Activity生命周期函数记录Activity状态

在上面的系统配置变化的例子中可以看到Activity中提供了记录状态的方法。onSaveInstanceState以及onRestoreInstanceState,这两个方法都是用Bundle。除此之外我们还能看到在onCreate方法中也有一个Bundle类型的参数,这个Bundle就是保存的状态的载体。

我们知道Activity会由于一些行为被销毁,比如,退出Activity。这些正常的操作会销毁Activity实例,并且系统不会保有Activity的状态。还有一种情况是当Activity处于后台时,由于内存问题会被系统回收或者系统配置改变导致的销毁重建,这个时候系统会保有Activity的状态,就是Bundle存储的数据,在Activity重建是会获取到Bundle中的数据。

总结

在上面介绍了Activity在各种场景下的生命周期表现。理解这些生命周期的调用有利于在开发时更好的处理Activity与用户的交互,同时也能避开一些常见的问题。

转载于:https://juejin.im/post/5cbaae115188253247129e3e

重温Android四大组件(一)—Activity的生命周期相关推荐

  1. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  2. Android四大组件之一Activity的生命周期

    Activity的七大生命周期 onCrate 不可见不可交互. onStart 可见不可交互 . onResume 可见可交互 . onPause 可见不可交互 .onStop 不可见不可交互 . ...

  3. Android四大组件之Activity(第一篇-简单使用)

    Android四大组件之Activity(第一篇-简单使用) 前言 一.Activity是什么? 二.如何使用 1.继承 2.重写onCreate() 总结 文章目录 前言 一.Activity是什么 ...

  4. Android实验二:Activity的生命周期

    要求 设计如下界面,包括四个按钮,两个文本框.单击对应按钮可以启动对应activity.假 定Activity A为启动Activity. 部分代码 import androidx.appcompat ...

  5. 【Android 四大组件之Activity】一文吃透Activity 生命周期

    作者:半身风雪 简介:在Android组件中最基本也是最为常见的四大组件: Activity Service服务 Content Provider内容提供者 BroadcastReceiver广播接收 ...

  6. Android 四大组件之 Activity

    什么是 Activity? Activity 是 Android 的四大组件之一,是用户操作的可视化界面,它为用户提供了一个完成操作指令的窗口. 当我们创建完 Activity 之后,需要调用 set ...

  7. android四大组件之Activity(三)

    这是一篇关于android开发四大组件Activity部分的笔记之一,其中主要介绍Activity的生命周期以及一些实例等内容.这里所用到的开发工具是Android4.1. 目录 14.Activit ...

  8. 第六课-Android四大组件之Activity

    Activity是Android四大组件之一,它是个控制类,主要控制界面的加载显示,用户交互处理,数据的获取,数据的传送等.在它的onCreate方法中的setContentView方法就是来加载一个 ...

  9. Android四大组件之——Activity(一)定义、状态和后退栈(图文详解)

    什么是Activity 关键字:应用组件.四大组件.用户界面,交互. An Activity is an application component that provides a screen wi ...

最新文章

  1. 没有了传感器,工业机器人还能工作吗?
  2. 官宣!中央广播电视总台《2021年春节联欢晚会》总导演组公布
  3. 【Python】Error:Input 'y' of 'Add' Op has type float32 that does not match type int32 of argument 'x'.
  4. python使用print不换行
  5. 台积电:高雄地震对生产影响比预期略高
  6. C# 类与对象(面向对象的编程)
  7. 什么是网关,网关的作用
  8. 关于Java Web工程中web.xml文件
  9. python之numpy基础_Python之Numpy操作基础
  10. manjaro xfce 环境配置
  11. oracle直接路径读,direct path read直接路径读
  12. 宏基因组分析-基于组装
  13. MatLab SimuLink国产代替
  14. 《文明6》引言科普 引言出处讲解 【转】
  15. 少儿编程scratch如何快速上手?
  16. ALBRECHT铣刀夹头BT50 20-32
  17. Linux下基于GTK人脸识别界面设计
  18. 前端学习笔记-9.1怎样注册亚马逊aws免费1年云服务器?
  19. 在Visual2019中如何添加日历表?这里有答案
  20. 嵌入式Linux移植littlevgl7,安富莱V6移植littlevgl的前因后果,附移植好的工程(未优化)...

热门文章

  1. 白话Elasticsearch43-深入聚合数据分析之案例实战__排序:按每种颜色的平均销售额升序排序
  2. Spring-AOP 自动创建代理之DefaultAdvisorAutoProxyCreator
  3. unable to access ‘https://gitee...‘: Failed to connect to 127.0.0.1 port 31181 after 2029 ms: Connec
  4. python 状态机教程_python 实用工具状态机transitions
  5. QT界面操作1:如何跟踪鼠标位置?
  6. java web jsp相对路径_Java Web中的相对路径与绝对路径总结
  7. Spring学习3之IOC创建对象的方式
  8. python 对象创建_从Python中的基类对象创建对象
  9. caffe windows学习:第一个测试程序
  10. Visual Studio 2010或者2012上安装VASSISTX