根据您的描述,我会冒险猜测你正在检查onCreate
状态。在onCreate
期间,生命周期状态仅为INITIALIZED
。
请参阅Google的此图。 Google Lifecycle State Diagram
这就是说你可以使用注解库来观察你何时进入了STARTED
状态。
@OnLifecycleEvent(Lifecycle.EVENT.ON_START)
void doSomething(){
//do the thing that needs the lifecycle to be at least started
}
认为这是所谓的后,每在onStart完成。因此,在某些逻辑中烘烤以确定是否适合做需要做的事情是合适的。
为使此代码正常工作,要观察生命周期事件的类必须实现LifecycleObserver
。这可以是任何类,甚至活动或片段本身。下面的代码适用于将作为生命周期观察者的普通类/模块。
public class LifeCycleObserverModule implements LifecycleObserver {
LifeCycleObserverModule(Lifecycle lifecycle) {
//register the life cycle to observe
this.lifecycle = lifecycle;
this.lifecycle.addObserver(this);
}
}
如果你是做一个活动遵守它自己的生命周期,将是这样的:
public class MainActivity extends AppCompatActivity implements LifecycleObserver {
@Override
protected void onCreate(Bundle savedInstanceState) {
getLifecycle().addObserver(this)
}
}
对于它的工作原理相同的片段,但可以观察它自己的生命周期或者说明活动。如果你想要观察活动的生命周期,你可以这样做。否则,它将和上面的Activity示例一样。
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
getActivity().getLifecycle().addObserver(this);
}
最后一点,我不完全清楚如果一个Activity或Fragment观察它自己的生命周期是最佳实践。但它确实有效,而且似乎没有这样做的不良后果。我目前正在使用上述方法在我正在处理的几个应用程序中。
编辑:更正了示例代码。它曾经说@OnLifecycleEvent(Lifecycle.EVENT.STARTED)
正如评论STARTED
中指出的那样不存在,正确的值是ON_START
。对不起,混音。
得到了appCompat片段的同样的问题。巴勃罗,你知道这个解决方案吗? –
没有抱歉,我还没有使用过这个api更多 –