根據您的描述,我會冒險猜測你正在檢查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更多 –