安卓讲课笔记2.2 Activity生命周期

举报
howard2005 发表于 2022/09/25 06:58:25 2022/09/25
【摘要】 文章目录 零、学习目标一、导入新课二、新课讲解(一)Activity生命周期1、了解Activity生命周期2、Activity生命周期简化图(1)Activity存在与否(2)Activity可...

零、学习目标

  1. 理解Activity生命周期图
  2. 掌握生命周期回调方法
  3. 利用日志类Log输出信息

一、导入新课

  • 当用户浏览、退出和返回到您的应用时,您应用中的 Activity 实例会在其生命周期的不同状态间转换。Activity 类会提供许多回调,这些回调会让 Activity 知晓某个状态已经更改:系统正在创建、停止或恢复某个 Activity,或者正在销毁该 Activity 所在的进程。

二、新课讲解

在这里插入图片描述

(一)Activity生命周期

1、了解Activity生命周期

  • 当用户浏览、退出和返回到您的应用时,您应用中的 Activity 实例会在其生命周期的不同状态间转换。Activity 类会提供许多回调,这些回调会让 Activity 知晓某个状态已经更改:系统正在创建、停止或恢复某个 Activity,或者正在销毁该 Activity 所在的进程。
  • 在生命周期回调方法中,您可以声明用户离开和再次进入 Activity 时 Activity 的行为方式。例如,如果您正构建流媒体视频播放器,当用户切换至另一应用时,您可能要暂停视频或终止网络连接。当用户返回时,您可以重新连接网络并允许用户从同一位置继续播放视频。换言之,每个回调都支持您执行适合给定状态变更的特定作业。在合适的时间执行正确的作业,并妥善处理转换,这将提升应用的稳健性和性能。例如,良好的生命周期回调实现有助于防止应用出现以下问题:
    – 当用户在使用应用时接听来电,或切换至另一应用时崩溃。
    – 当用户未主动使用它时,消耗宝贵的系统资源。
    – 当用户离开应用并在稍后返回时,丢失用户的进度。
    – 当屏幕在横向和纵向之间旋转时,崩溃或丢失用户的进度。

2、Activity生命周期简化图

  • 为了在Activity生命周期各个阶段之间导航转换,Activity类提供六个核心回调方法:onCreate()onStart()onResume()onPause()onStop()onDestroy()。当 Activity 进入新状态时,系统会调用其中每个回调方法。
    在这里插入图片描述
    在这里插入图片描述

(1)Activity存在与否

  • Activity整个生命周期从onCreate()方法开始,到最终调用onDestroy()方法结束。对于Activity的全局资源在onCreate()方法中设置,最终在onDestroy()方法中进行资源回收。

(2)Activity可见与否

  • Activity触发onStart()方法后处于可见状态,但未必能与用户进行交互。当Activity完全不可见时,触发onStop()方法。重新可见时,先触发onRestart()方法,再触发onStart()方法。onStart()方法和onStop()方法可以被多次调用。

(3)Activity可交互与否

  • Activity在onResume()方法和onPause()方法之间时处于活动状态,此时可以与用户进行交互。

3、Android进程优先级

  • 应用程序的生命周期是在Android系统中进程从启动到终止的所有阶段,也就是Android从启动到停止的全过程。Android应用程序的生命周期的终结这个动作并非由应用程序进程本身执行,而是取决于Android系统。那么,系统是根据一个怎样的重要性标准来终止Android应用程序呢?Android根据应用程序的组件以及组件当前运行状态将所有的进程按重要性程度从高到低划分为五个,如下图所示:
    在这里插入图片描述

(二)Activity生命周期回调方法

1、onCreate()回调方法

  • 系统首次创建 Activity 时触发,同时还以Bundle形式存储以前的状态。

2、onRestart()回调方法

  • 重新启动Activity调用,该Activity在堆栈中,而不是创建一个新Activity。

3、onStart()回调方法

  • 当 Activity 进入“已开始”状态时,系统会调用此回调。调用onStart()方法使Activity对用户可见,因为应用会为 Activity 进入前台并支持互动做准备。

4、onResume()回调方法

  • Activity 会在进入“已恢复”状态时来到前台,然后系统调用 onResume() 回调。这是应用与用户互动的状态。应用会一直保持这种状态,直到某些事件发生,让焦点远离应用。

5、onPause()回调方法

  • Activity被暂停。该方法是用来保存活动状态的地方,以便Activity被重新启动时具有与其退出相同的状态。

6、onStop()回调方法

  • 当Activity不再对用户可见,说明其已进入“已停止”状态,因此系统将调用onStop()回调。

7、onDestroy()回调方法

  • 销毁Ativity之前,系统会先调用onDestroy()。onDestroy()回调应释放先前的回调(例如onStop())尚未释放的所有资源。

(三)利用Log类输出信息

  • 在调试代码时,需要查看调试信息,就需要用安卓的android.util.Log类,它有5个常用方法。注意:不同打印方法使用时,都带上(String tag, String msg)参数,tag表示打印信息的标签,msg表示需要打印的信息。

1、Log.v()方法

  • 输出颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v(“”,“”);

2、Log.d()方法

  • 输出颜色是蓝色的,仅输出debug调试信息,但会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择。

3、Log.i()方法

  • 输出颜色为绿色,输出一般提示性消息,不会输出Log.v和Log.d的信息,但会显示i、w和e的信息。

4、Log.w()方法

  • 输出颜色为橙色,输出警告信息,一般需要我们注意优化安卓代码,同时选择它后还会输出Log.e的信息。

5、Log.e()方法

  • 输出颜色为红色,仅显示红色的错误信息,需要我们认真分析,查找出错原因。

(四)回调方法案例演示

1、创建安卓应用

  • 基于Empty Activity模板
    在这里插入图片描述

  • 配置项目信息
    在这里插入图片描述

  • 单击【Finish】按钮,完成项目初始化
    在这里插入图片描述

2、主布局资源文件

  • 将约束布局改成线性布局,并设置标签控件相关属性
    在这里插入图片描述

3、字符串资源文件

  • strings.xml文件里修改app_name变量值,添加新变量test_life_cycle
    在这里插入图片描述

4、主界面类实现功能

  • MainActivity里定义标记常量TAG
    在这里插入图片描述

  • 在每个回调方法里输出一条调试信息
    在这里插入图片描述

5、添加消息过滤器

  • 为了更好地查看本应用的调试信息,需要添加消息过滤器。创建消息过滤器life_cycle_filter,日志标记为life_cycle
    在这里插入图片描述

6、启动应用,查看日志

  • 启动应用,查看LogCat里的消息
    在这里插入图片描述

  • 单击【Home】键,返回手机应用桌面
    在这里插入图片描述

  • 此时,应用窗口被桌面遮住,查看日志消息
    在这里插入图片描述

  • 单击【Overview】键,查看最近应用列表
    在这里插入图片描述

  • 最近打开的应用就是【生命周期】
    在这里插入图片描述

  • 单击在后台运行的【生命周期】应用,其窗口又重回前台,查看日志信息
    在这里插入图片描述

  • 按【Back】按键,其实无法关闭【生命周期】应用
    在这里插入图片描述

  • 应该按【Overview】键,选中【生命周期】应用向上滑动,即可关闭该应用
    在这里插入图片描述

  • 从日志信息可以看出三层架构

    1. 最外层(onCreate - onDestory)——(存在 - 不存在)
    2. 中间层(onStart - onStop)—— (可见 - 不可见)
    3. 最内层(onResume - onPause)—— (可交互 - 不可交互)
  • 查看操作录屏
    在这里插入图片描述

三、归纳总结

  • 回顾本节课所讲的内容,并通过提问的方式引导学生解答问题并给予指导。

四、上机操作

  • 形式:单独完成
  • 题目:生命周期回调方法演示
  • 要求:按照讲课笔记完成,在七个回调方法输出调试信息

文章来源: howard2005.blog.csdn.net,作者:howard2005,版权归原作者所有,如需转载,请联系作者。

原文链接:howard2005.blog.csdn.net/article/details/126998711

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。