Activity进入CREATED状态的具体时机及定义差异相关疑问
官方文档对
onCreate()的说明:
开发者必须实现该回调,它会在系统首次创建Activity时触发。Activity创建完成后会进入Created状态。你需要在onCreate()方法中执行整个Activity生命周期内仅需执行一次的基础应用启动逻辑。
1. CREATED状态出现时机
CREATED状态出现在onCreate()调用完成之后,和官方文档的描述完全一致,不存在矛盾。
Jetpack Lifecycle组件的State枚举中明确标注:Activity的CREATED状态触发场景之一就是onCreate回调执行完毕之后。
2. 文档CREATED状态与Lifecycle.State.CREATED的差异说明
二者的理论含义完全一致,不存在差异,不建议略过该状态定义:
- 官方文档提到的Created状态就是Lifecycle组件中
CREATED常量对应的状态,二者是同一概念的不同表述场景 - CREATED是生命周期感知组件的核心判断节点,很多生命周期关联API(比如
lifecycleScope.launchWhenCreated、LiveData的自动取消逻辑)都依赖该状态做判断,明确其定义能避免很多生命周期相关的Bug。
附:Lifecycle.State中文注释完整代码
/** * 生命周期状态。你可以把这些状态看作状态图的节点,{@link Event}则是节点之间的边。 */ @SuppressWarnings("WeakerAccess") public enum State { /** * LifecycleOwner的销毁状态。进入该状态后,当前Lifecycle不会再分发任何事件。 * 举例来说,对于{@link android.app.Activity},会在{@link android.app.Activity#onDestroy() onDestroy}调用之前进入该状态。 */ DESTROYED, /** * LifecycleOwner的初始化状态。对于{@link android.app.Activity},指Activity已经被实例化,但还未接收到{@link android.app.Activity#onCreate(android.os.Bundle) onCreate}回调的状态。 */ INITIALIZED, /** * LifecycleOwner的创建状态。对于{@link android.app.Activity},会在两种场景下进入该状态: * <ul> * <li>{@link android.app.Activity#onCreate(android.os.Bundle) onCreate}调用完成之后</li> * <li>{@link android.app.Activity#onStop() onStop}调用之前</li> * </ul> */ CREATED, /** * LifecycleOwner的开始状态。对于{@link android.app.Activity},会在两种场景下进入该状态: * <ul> * <li>{@link android.app.Activity#onStart() onStart}调用完成之后</li> * <li>{@link android.app.Activity#onPause() onPause}调用之前</li> * </ul> */ STARTED, /** * LifecycleOwner的恢复状态。对于{@link android.app.Activity},会在{@link android.app.Activity#onResume() onResume}调用完成之后进入该状态。 */ RESUMED; /** * 比较当前状态是否大于等于给定的state * * @param state 待比较的状态 * @return 如果当前状态大于等于给定状态返回true,否则返回false */ public boolean isAtLeast(@NonNull State state) { return compareTo(state) >= 0; } }
内容的提问来源于stack exchange,提问作者Manish Kumar Sharma
相关产品推荐
相关产品推荐

