根据您的描述,我会冒险猜测您正在检查状态onCreate
。在onCreate
生命周期中状态仅为INITIALIZED
.
请参阅 Google 的此图表。
谷歌生命周期状态图(链接断开但可以在回程机器上访问)
也就是说,您可以使用注释库来观察您何时进入STARTED
状态。
@OnLifecycleEvent(Lifecycle.EVENT.ON_START)
void doSomething(){
//do the thing that needs the lifecycle to be at least started
}
也就是说,在每个 onStart 完成后都会调用它。因此,谨慎的做法可能是加入一些逻辑来确定这是否是做需要做的事情的合适时间。
同样为了使这段代码工作,观察生命周期事件的类必须实现LifecycleObserver
。这可以是任何类,甚至是 Activity 或 Fragment 本身。以下代码适用于将充当生命周期观察者的通用类/模块。
public class LifeCycleObserverModule implements LifecycleObserver {
LifeCycleObserverModule(Lifecycle lifecycle) {
//register the life cycle to observe
this.lifecycle = lifecycle;
this.lifecycle.addObserver(this);
}
}
如果您要让 Activity 观察它自己的生命周期,它将类似于:
public class MainActivity extends AppCompatActivity implements LifecycleObserver {
@Override
protected void onCreate(Bundle savedInstanceState) {
getLifecycle().addObserver(this)
}
}
对于一个片段,它的工作方式相同,但它可以观察它自己的生命周期或活动的生命周期。如果你想让它观察 Activity 的生命周期,你可以这样做。否则,这将与上面的 Activity 示例相同。
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
getActivity().getLifecycle().addObserver(this);
}
最后一点,我不完全清楚观察自己的生命周期的活动或片段是否是最佳实践。但它确实有效,而且这样做似乎没有任何不良影响。我目前在我正在开发的几个应用程序中使用上述方法。
编辑:更正了示例代码。它曾经说过@OnLifecycleEvent(Lifecycle.EVENT.STARTED)
,正如评论中指出的STARTED
那样不存在,正确的值是ON_START
. 很抱歉混淆了。