一文读懂Activity、Fragment和Service的生命周期
  pldY3AmarceX 2023年11月28日 14 0



文章目录

  • 前言
  • 一、Activity生命周期
  • 二、Fragment生命周期
  • 三、Service生命周期
  • 总结



前言

了解不同组件的生命周期有助于开发人员更好地掌握应用程序的行为,从而优化应用程序的用户体验和性能。例如,当用户旋转设备时,Activity 会重新创建,因此开发人员需要保存活动状态并在必要时还原它们。类似地,当内存不足时,系统可能会销毁 Activity、Fragment 和 Service,因此应用程序需要能够正确地处理这种情况,以避免崩溃和数据丢失。

理解生命周期还有助于开发人员有效地管理资源。例如,使用 Service 可以在后台操作,而无需活动存在。了解 Service 的生命周期可以让开发人员更好地处理其资源使用。


一、Activity生命周期

作为 UI 界面的主体容器,Activity 具有独立的生命周期,它包含了各种状态和事件,开发者需要清楚其生命周期的各阶段及其方法的调用时机。

一文读懂Activity、Fragment和Service的生命周期_android


相关回调和作用:

  • onCreate():当 Activity 被创建时调用。该方法是生命周期的第一个回调函数,主要用于初始化 Activity 的状态和布局等初始化工作。
  • onStart():在 Activity 即将变为可见状态时调用。该方法通常用于启动播放音乐、打开网络连接、启动动画等等与界面相关的操作。
  • onResume():当 Activity 进入前台并开始与用户交互时调用。在其中,通常用于初始化开启某个定时器、响应触摸事件和使用相机等与用户交互相关的操作。
  • onPause():当 Activity 即将进入后台并停止与用户交互时调用。在其中通常用于保存数据、释放一些对 CPU 和资源占用较高的长时间操作,例如停止相机预览,传感器(例如 GPS)手柄等。
  • onStop():当 Activity 不再可见时调用。该方法通常用于停止较消耗资源的一些资源、解除监听等资源占用过高的操作,还可以使用 onStop()执行 CPU 相对密集的关闭操作。例如,如果无法找到更合适的时机来将信息保存到数据库,可以在 onStop() 期间执行此操作。
  • onDestroy():当 Activity 被销毁时调用。该方法通常用于清空 Activity 所占用的内存资源。
  • onRestart():当 Activity 由停止状态变为再次启动状态时触发该事件。通常用于初始化之前的某些状态。
  • onConfigurationChanged():当设备配置发生变化时调用。例如旋转屏幕,键盘等。通常用于保存用户状态和应用数据等。
  • onSaveInstanceState():当 Activity 即将被销毁时保存应用状态,以便在重建 Activity 时恢复状态等数据信息。
  • onRestoreInstanceState():在重建 Activity 时恢复保存的数据状态等信息。

二、Fragment生命周期

Fragment 表示应用界面中可重复使用的一部分。fragment 定义和管理自己的布局,具有自己的生命周期,并且可以处理自己的输入事件。fragment 不能独立存在。它们必须由 activity 或其他 fragment 托管。fragment 的视图层次结构会成为宿主的视图层次结构的一部分,或附加到宿主的视图层次结构。

一文读懂Activity、Fragment和Service的生命周期_开发人员_02

安卓中的 Fragment 是一种用于 UI 界面组织和管理的组件。它具有独立的生命周期,能够在 Activity 中动态添加、删除和替换。下面是安卓 Fragment 的生命周期及其相应方法:

  • onAttach():当 Fragment 被添加到 Activity 时调用,表示该 Fragment 已经依附在 Activity 上了。可通过该方法接收来自 Activity 的传递的参数,并进行一些初始化操作。
  • onCreate():当 Fragment 被创建时调用,一般用于进行一些资源的初始化操作,如开启线程、读取文件等。
  • onCreateView():创建 Fragment 的布局 UI,即生成 View 对象。该方法返回一个 View 对象,用于在 Activity 中显示该 Fragment。
  • onActivityCreated():当 Activity 的 onCreate() 方法执行完毕后调用,表示该 Fragment 所依附的 Activity 已经初始化完毕。
  • onStart():当 Fragment 可见时调用,被调用时 Fragment 已经和 Activity 关联在一起。
  • onResume():当 Fragment 处于前台时调用,表示界面正在活动。在此阶段可以进行耗时操作等逻辑。
  • onPause():当 Fragment 失去焦点时调用,表示界面即将被暂停。
  • onStop():当 Fragment 不可见时调用,表示该 Fragment 已经弹出出栈。
  • onDestroyView():从 Fragment 中删除相应的 UI 界面。
  • onDestroy():当 Fragment 被销毁时调用,用于进行一些资源的释放操作,如关闭线程、释放内存等。
  • onDetach():当 Fragment 和 Activity 解除关联时调用,表示该 Fragment 已经从 Activity 上分离。

一文读懂Activity、Fragment和Service的生命周期_android_03

三、Service生命周期

Service 是一种长时间运行的后台组件,它可以在应用进程退出后继续运行,并提供一些需要长时间运行的操作,例如下载文件、处理后台任务等。

一文读懂Activity、Fragment和Service的生命周期_开发人员_04

  • 创建阶段(onCreate):通过调用 onCreate 方法,系统在 Service 的生命周期中创建该 Service 的实例。在该方法中通常会完成一些初始化的操作、绑定需要监听的数据或者启动端口监听。
  • 启动阶段(onStartCommand):通过调用 onStartCommand 方法,系统将 Service 交付给客户端,同时启动该 Service 并使其在后台运行。在该方法中通常会完成一些耗时的操作,例如下载文件等。
  • 运行阶段:在该阶段,Service 正在执行任务或者提供服务。可以在该阶段内使用 Service 提供的方法,例如在后台执行计算任务、播放音频或者向服务器发送请求等。
  • 结束阶段(onDestroy):通过调用 onDestroy 方法,系统撤销了 Service 的所有相关信息、资源和运行状态。在该方法中通常会完成一些回收资源和解除绑定的操作。

除了上述几个常规生命周期方法外,Service 还有以下两个方法:

  • onBind:当 Service 可以绑定到另一个组件时调用的方法,它返回一个 IBinder 对象,以便在与客户端间执行通信。
  • onUnbind:当其他组件与 Service 断开连接时调用的方法,清理 Service 运行状态并释放资源。

如果 Service 被 onBind() 方法绑定到 Activity 上,则需要 Activity 调用 unbindService() 方法来解除绑定。如果Service被多个Activity所绑定,那么要所有的 Activity 都解绑后,Service 才会销毁。

通过 startService() 方法启动 Service,则 Service 不会在解绑时销毁,而是需要调用 stopService() 或者 stopSelf() 方法来停止并销毁 Service。

在 Service 的生命周期中,onCreate 和 onDestroy 方法往往用于初始化和清理资源,onStartCommand 方法和 onBind、onUnbind 方法负责相关服务的业务逻辑处理和通信交互。

相关方法介绍:
onStartCommand onStartCommand() 方法是 Service 组件中最重要的方法之一。它在 Service 启动时调用,用于处理启动命令和数据传输。
具体来说,在调用 startService() 方法后,系统会在后台启动 Service,并立即调用 Service 的 onStartCommand() 方法。该方法接受三个参数:Intent、flags 和 startId。

Intent 参数传递启动命令和数据(如果有的话),flags 参数用于指示启动方式,startId 参数则为该启动请求的唯一标识符。通过这些参数,Service 可以处理启动命令,并在必要时将结果返回给 Activity 或其他组件。

onStartCommand() 方法的返回值用于指示系统如何处理 Service。它可以返回以下值之一:

START_STICKY:Service 在被系统杀死后会自动重启并尝试重新创建。
START_NOT_STICKY:Service 在被系统杀死后不会自动重启。
START_REDELIVER_INTENT:Service 在被系统杀死后会自动重启,并使用最后一个 Intent 重新启动或调用 onStartCommand()。


总结

理解 Activity、Fragment 和 Service 生命周期对于 Android 开发非常重要,因为生命周期管理是应用程序创建和维护正确状态的关键部分。

了解不同组件的生命周期有助于开发人员更好地掌握应用程序的行为,从而优化应用程序的用户体验和性能。例如,当用户旋转设备时,Activity 会重新创建,因此开发人员需要保存活动状态并在必要时还原它们。类似地,当内存不足时,系统可能会销毁 Activity、Fragment 和 Service,因此应用程序需要能够正确地处理这种情况,以避免崩溃和数据丢失。

理解生命周期还有助于开发人员有效地管理资源。例如,使用 Service 可以在后台操作,而无需活动存在。了解 Service 的生命周期可以让开发人员更好地处理其资源使用。

总之,理解不同组件的生命周期是开发人员创建高质量、稳定和高性能应用程序的关键所在。



链接: https://developer.android.google.cn/guide/components/activities/activity-lifecycle?hl=zh_cn


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月28日 0

暂无评论

推荐阅读
pldY3AmarceX