当在 ViewPager 中使用时,是否必须将片段的 `onDestroyView()` 中的视图设置为 null?
Do I have to set views to null in `onDestroyView()` for Fragments when used inside a ViewPager?
如果我有一个 FragmentStatePagerAdapter
有很多这样的 Fragment
:
public class MyFragment extends Fragment {
View myView;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState {
myView = view.findViewById(R.id.my_view);
}
}
现在假设我滚动到其他页面...这是否会泄露屏幕外其他页面的破坏视图(因为我有对它们的引用 - myView
s)?
这样做有帮助吗:
@Override
public void onDestroyView() {
myView = null;
}
不需要。 FragmentStatePagerAdapter
负责自动销毁片段。由于 myView 引用位于 Fragment 内部并且不是静态的,因此它也会被销毁。
FragmentStatePagerAdapter 文档:
https://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html
When pages are not visible to the user, their entire fragment may be
destroyed, only keeping the saved state of that fragment
请注意,默认情况下,这会在内存中保存 3 个片段(如果可用)而不破坏。当前正在屏幕上显示的一个,一个在当前片段的左侧,一个在右侧。不过,您可以自定义该计数。
如果我有一个 FragmentStatePagerAdapter
有很多这样的 Fragment
:
public class MyFragment extends Fragment {
View myView;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState {
myView = view.findViewById(R.id.my_view);
}
}
现在假设我滚动到其他页面...这是否会泄露屏幕外其他页面的破坏视图(因为我有对它们的引用 - myView
s)?
这样做有帮助吗:
@Override
public void onDestroyView() {
myView = null;
}
不需要。 FragmentStatePagerAdapter
负责自动销毁片段。由于 myView 引用位于 Fragment 内部并且不是静态的,因此它也会被销毁。
FragmentStatePagerAdapter 文档:
https://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html
When pages are not visible to the user, their entire fragment may be destroyed, only keeping the saved state of that fragment
请注意,默认情况下,这会在内存中保存 3 个片段(如果可用)而不破坏。当前正在屏幕上显示的一个,一个在当前片段的左侧,一个在右侧。不过,您可以自定义该计数。