正如Mordag所說,截至目前,LifecycleActivity和LifecycleFragment都尚未實施。在他們的文檔谷歌表示:
任何定製的片斷或活動可以通過執行內置LifecycleRegistryOwner接口(而不是延長LifecycleFragment或LifecycleActivity)變成一個LifecycleOwner。
然而,這只是故事的一半,因爲自然使用的是這些生命週期數據的組件,以便能夠對您的活動/片段生命週期,並與他們的代碼段,它只是不工作的反應,因爲一個初始化像這樣的活動/片段的生命週期註冊
LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this);
只會讓您處於初始化狀態的生命週期。
因此,長話短說,爲了使它現在能夠正常工作(在1.0版本發佈之前),您需要實現實現LifecycleRegistry的Activity/Fragment的生命週期。因此,對於活動/片段的每次回調,你需要這樣做:
public class ScoreMasterFragment extends Fragment implements LifecycleRegistryOwner {
private LifecycleRegistry lifecycle;
@Override
public LifecycleRegistry getLifecycle() {
return lifecycle;
}
public ScoreMasterFragment(){
lifecycle new LifecycleRegistry(this);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//more code here
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
}
@Override
public void onStart() {
super.onStart();
//more code here
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_START);
}
@Override
public void onResume() {
super.onResume();
//more code here
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_RESUME);
}
@Override
public void onPause() {
super.onPause();
//more code here
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE);
}
@Override
public void onStop() {
super.onStop();
//more code here
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_STOP);
}
@Override
public void onDestroy() {
super.onDestroy();
//more code here
_lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);
}
這可能會在未來LifecycleActivity和LifecycleFragment的代碼,但在那之前,如果你把你的活動/碎片觀測一些LifecycleAware對象(如LiveData),你將不得不這樣做。
在LiveData的情況下,因爲它不會通知它的觀察者,除非它們至少處於STARTED狀態,並且在其他情況下是因爲如果其唯一狀態是INITIALIZED,其他LifecycleAware組件就不能對生命週期做出反應。
謝謝你的回答,但不,我不需要做所有這些回調,它的工作現在。你只需要定義LifecycleRegistry並實現LifecycleOwner –
那麼我可能會誤解你的問題。但是我寫的基本上是定義了一個LifecycleRegistry,我相信你在觀察LiveData時需要這樣做。難道你不是在找? – CarlosGoncalves
卡洛斯,即時通訊尋找活動或片段如何將有關變更生命週期的信息發送到生命週期註冊對象 –