当前位置: 首页 > news >正文

Android Kotlin 基础知识codelab activity 和 fragment 生命周期

activity 生命周期

  • activity 生命周期是 activity 会切换的一组状态。 activity 生命周期在 activity 首次创建时开始,到 activity 被销毁时结束。
  • 当用户在 activity 之间以及应用内外导航时,每个 activity 会在 activity 生命周期中的状态之间切换。
  • activity 生命周期中的每种状态都有一个对应的回调方法,您可以在 Activity 类中替换此类方法。生命周期方法有七种:onCreate()、onStart()、onPause()、onRestart()、onResume()、onStop() 和 onDestroy()
  • 如需添加要在 activity 转换为某种生命周期状态时发生的行为,请替换相应状态的回调方法。
  • 如需在 Android Studio 中为类添加框架替换方法,请依次选择 Code > Override Methods,或按 Control+o。

使用 Log 记录日志

  • 借助 Android 日志记录 API(具体而言是 Log 类),您可以写入要在 Android Studio 内的 Logcat 中显示的简短消息。
  • 使用 Log.i() 可写入信息性消息。此方法采用两个参数:日志标签(通常是类的名称)和日志消息(一个简短的字符串)。
  • 使用 Android Studio 中的 Logcat 窗格可查看系统日志,包括您写入的消息。

使用 Timber 记录日志

Timber 是一个日志记录库,与 Android 日志记录 API 相比具有多项优势。具体而言,Timber 库具有下列优势:

  • 可以根据类名称为您生成日志标签。
  • 有助于避免在您的 Android 应用的发布版本中显示日志。
  • 支持与崩溃报告库集成。

如需使用 Timber,请将其依赖项添加到您的 Gradle 文件中,然后扩展 Application 类,以对其进行初始化:

  • Application 是一个基类,包含整个应用的全局应用状态。如果您未指定 Application 类,Android 会使用默认的 Application 类。您可以创建自己的 Application 子类来初始化 Timber 等应用级库。
  • 通过将 android:name 属性添加到 Android 清单中的 元素,可以将自定义 Application 类添加到您的应用。请不要忘记执行此操作!
  • 使用 Timber.i() 可通过 Timber 写入日志消息。此方法仅接受一个参数:要写入的消息。系统会自动添加日志标签(类名称)。

生命周期提示

  • 如果您在一个生命周期回调中设置或开始了某项内容,之后需要在相应的回调中停止或移除该内容。通过停止该内容,您可以确保当不再需要它时它不会继续运行。例如,如果您在 onStart() 中设置了一个计时器,之后需要在 onStop() 中暂停或停止该计时器。
  • 使用 onCreate() 仅初始化您的应用中在它首次启动时运行一次的部分。使用 onStart() 启动您的应用中既会在它启动时运行又会在它每次返回前台时运行的部分。

生命周期库

  • 使用 Android 生命周期库可以将生命周期控制从 activity 或 fragment 转移到需要具有生命周期感知能力的实际组件。
  • 生命周期所有者是具有(因而“拥有”)生命周期的组件,包括 Activity 和 Fragment。生命周期所有者会实现 LifecycleOwner 接口。
  • 生命周期观察器关注当前的生命周期状态,并在生命周期发生变化时执行任务。生命周期观察器会实现 LifecycleObserver 接口。
  • Lifecycle 对象包含实际的生命周期状态,并且会在生命周期发生变化时触发事件。

如需创建生命周期感知型类,请执行以下操作:

  • 在需要具有生命周期感知能力的类中实现 LifecycleObserver 接口。
  • 使用来自 activity 或 fragment 的生命周期对象来初始化生命周期观察器类。
  • 在生命周期观察器类中,使用生命周期感知型方法关注的生命周期状态变化来为这些方法添加注解。
    例如,@OnLifecycleEvent(Lifecycle.Event.ON_START) 注解表明相应的方法正在观察 onStart 生命周期事件。

进程关闭和保存 activity 状态

  • Android 会管控在后台运行的应用,以使前台应用在运行过程中不会出现问题。这种管控包括限制后台应用可以执行的处理量,有时甚至会关闭整个应用进程。
  • 用户无法判断系统是否关闭了一个后台应用。该应用仍出现在“最近使用的应用”屏幕中,并且应以用户离开它时所处的状态重启。
  • Android 调试桥 (adb) 是一个命令行工具,可让您向连接到计算机的模拟器和设备发送指令。您可以使用 adb 来模拟应用中的进程关闭。
  • 当 Android 关闭您的应用进程时,系统不会调用 onDestroy() 生命周期方法。应用只是停止了。

保留 activity 和 fragment 状态

  • 当您的应用进入后台时(就在调用 onStop() 之后),系统会将应用数据保存到 bundle 中。系统会自动为您保存一些应用数据,如 EditText 的内容。
  • bundle 是 Bundle 的一个实例,Bundle 是键和值的集合。键始终为字符串。
  • 使用 onSaveInstanceState() 回调可将其他数据保存到您要保留的 bundle 中,即使应用自动关闭也是如此。如需将数据放入 bundle,请使用以 put 开头的 bundle 方法,例如 putInt()。
  • 您可以通过 onRestoreInstanceState() 方法从 bundle 中重新获取数据,更常用的方式是使用 onCreate()。onCreate() 方法有一个用于存储 bundle 的 savedInstanceState 参数。
  • 如果 savedInstanceState 变量包含 null,表示 activity 启动时没有状态 bundle,并且没有可以检索的状态数据。
  • 如需使用键从 bundle 中检索数据,请使用以 get 开头的 Bundle 方法,如 getInt()。

配置变更

  • 当设备的状态发生了根本性改变,以至于系统解决改变的最简单方式就是关闭并重建 activity 时,就会发生配置变更。
  • 最常见的配置变更示例是用户将设备从竖屏模式旋转为横屏模式,或者从横屏模式旋转为竖屏模式。当设备语言发生变化或插入硬件键盘时,也会发生配置变更。
  • 当发生配置变更时,Android 会调用所有 activity 生命周期的关闭回调。然后,Android 会从头开始重启相应 activity,同时运行所有生命周期启动回调。
  • 当 Android 因配置变更而关闭某个应用时,它会使用对 onCreate() 可用的状态 bundle 重启相应 activity。
    与进程关闭一样,通过 onSaveInstanceState() 将应用的状态保存到 bundle 中。

相关文章:

  • 数据结构---KMP算法
  • PHP——运算符
  • 笔试强训48天——day25
  • 有了@MapperScan就不用@Mapper了你知道嘛
  • Docker之Nacos的持久化和集群部署
  • 前端——表单相关的属性(上)
  • 【C++初阶7-stringOJ】上手用一下
  • 【Java 实战】通过ElasticSearch实现全局搜索功能
  • webgis —— 为瓦片构建缓存
  • 最惨面试季:“这么简单的9道题,我刷掉了90%的测试员。”
  • c++11 function模板:模板特化与可变参数函数模板
  • CSDN竞赛14期题解
  • Qt创建线程的几种方式_创建一个新线程的方法
  • Android自定义ViewGroup布局进阶,完整的九宫格实现
  • 完全开源的代码生成器之code-generator
  • 【css3】浏览器内核及其兼容性
  • Angularjs之国际化
  • ERLANG 网工修炼笔记 ---- UDP
  • java8 Stream Pipelines 浅析
  • node入门
  • React-flux杂记
  • SOFAMosn配置模型
  • Vim Clutch | 面向脚踏板编程……
  • windows-nginx-https-本地配置
  • 高性能JavaScript阅读简记(三)
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 深度学习入门:10门免费线上课程推荐
  • 深度学习在携程攻略社区的应用
  • 鱼骨图 - 如何绘制?
  • 智能网联汽车信息安全
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #14vue3生成表单并跳转到外部地址的方式
  • #define与typedef区别
  • $.ajax()参数及用法
  • (1)虚拟机的安装与使用,linux系统安装
  • (阿里云万网)-域名注册购买实名流程
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)计算机毕业设计大学生兼职系统
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)重识new
  • .net Application的目录
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET命令行(CLI)常用命令
  • /etc/shadow字段详解
  • @在php中起什么作用?
  • [ solr入门 ] - 利用solrJ进行检索
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [].shift.call( arguments ) 和 [].slice.call( arguments )