fragment 和 fragment 生命周期
fragment 和 fragment 生命周期
fragment
fragment 就是可重复使用的应用界面片段。与 activity 类似,fragment 具有生命周期并可以响应用户输入。fragment 在屏幕上显示时,会始终包含在 activity 的视图层次结构中。由于 fragment 侧重于可重用性和模块化,因此甚至可以由单个 activity 同时托管多个 fragment。每个 fragment 都管理着自己单独的生命周期。
fragment 生命周期
和 activity 一样,fragment 可以初始化以及从内存中移除;在整个存在期间,fragment 也会在屏幕上显示、消失和重新显示。此外,与 activity 类似,fragment 也有具有多种状态的生命周期,并提供了几种可替换的方法来响应它们之间的转换。fragment 生命周期有五种状态,由 Lifecycle.State 枚举表示。
- INITIALIZED:fragment 的一个新实例已实例化。
- CREATED:系统已调用第一批 fragment 生命周期方法。在 fragment 处于此状态期间,系统也会创建与其关联的视图。
- STARTED:fragment 在屏幕上可见,但没有焦点,这意味着其无法响应用户输入。
- RESUMED:fragment 可见并已获得焦点。
- DESTROYED:fragment 对象已解除实例化。
此外,与 activity 类似,Fragment 类还提供了多种可替换的方法来响应生命周期事件。
onCreate()
:fragment 已实例化并处于 CREATED 状态。不过,其对应的视图尚未创建。onCreateView()
:此方法可用于膨胀布局。fragment 已进入 CREATED 状态。onViewCreated()
:此方法在创建视图后调用。在此方法中,您通常会通过调用 findViewById() 将特定视图绑定到属性。onStart()
:fragment 已进入 STARTED 状态。onResume()
:fragment 已进入 RESUMED 状态,现已具有焦点(可响应用户输入)。onPause()
:fragment 已重新进入 STARTED 状态。相应界面对用户可见。onStop()
:fragment 已重新进入 CREATED 状态。该对象已实例化,但它在屏幕上不再显示。onDestroyView()
:该方法在 fragment 进入 DESTROYED 状态之前调用。视图已从内存中移除,但 fragment 对象仍然存在。onDestroy()
:fragment 进入 DESTROYED 状态。
下图总结了 fragment 生命周期以及状态之间的转换。
生命周期状态和回调方法与用于 activity 的方法非常相似。但请注意 onCreate()
方法的差异。通过 activity,您可以使用此方法膨胀布局和绑定视图。不过,在 fragment 生命周期中,系统会在创建视图之前调用 onCreate()
,所以您无法在此处膨胀布局。您可以改为在 onCreateView()
中执行此操作。然后,在创建视图后,系统会调用 onViewCreated()
方法,您可以在该方法中将属性绑定到特定视图。