我有一个了解生命周期的片段和一个LifecycleObserver
类
public class MyFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new MyObserver(this);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.activity_main, container, false);
}
}
以下是我的Observer类,在该类中正确记录了所有片段事件
public class MyObserver implements LifecycleObserver {
private static final String TAG = "MyObserver";
public MyObserver(LifecycleOwner lifecycleOwner) {
lifecycleOwner.getLifecycle().addObserver(this);
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate(){
Log.d(TAG, "onCreate: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause(){
Log.d(TAG, "onPause: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy(){
Log.d(TAG, "onDestroy: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart(){
Log.d(TAG, "onStart: ");
}
}
我想听片段特定的生命周期事件,例如onDestroyView
和onActivityCreated
,但这些事件不在其中
Lifecycle.Event
。它仅包含活动事件。如何在观察者中监听片段事件
您可以观察片段的viewLifecycleOwner
生命周期。
viewLifecycleOwner.lifecycle.addObserver(yourObserverHere)
然后,片段的onDestroyView
生命周期方法与@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
注释方法绑定在一起。
请注意,片段的viewLifecycleOwner
仅在onCreateView
和onDestroyView
生命周期方法之间可用。
只是对Basim Alamuddin的回答的补充:
您可以在资源代码中看到,当您向@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
添加观察者时,也会调用viewLifecycleOwner
:viewLifecycleOwner.lifecycle.addObserver(this)
// androidx.fragment.app.Fragment
void performDestroyView() {
if (mView != null) {
mViewLifecycleOwner.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);
}
onDestroyView();
void performDestroy() {
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);
onDestroy();
好吧,根据this,从字面上看onDestroyView
将在onStop
之后被调用。因此,如果您需要逻辑在onDestroyView之前运行或对其进行检测,我认为最好在片段的onStop()方法中对其进行调用或检测。就您而言,我认为您需要为Lifecycle.Event.ON_STOP
实现Lifecycle.Event.ON_START
和onActivityCreated
。
希望它对您有帮助。