gpt4 book ai didi

android - Activity的onDestroy/Fragment的onDestroyView设置Null做法

转载 作者:IT老高 更新时间:2023-10-28 21:46:16 28 4
gpt4 key购买 nike

我正在阅读 ListFragment 源代码,我看到了这个实现:

ListAdapter mAdapter;
ListView mList;
View mEmptyView;
TextView mStandardEmptyView;
View mProgressContainer;
View mListContainer;
CharSequence mEmptyText;
boolean mListShown;

/**
* Detach from list view.
*/
@Override
public void onDestroyView() {
mHandler.removeCallbacks(mRequestFocus);
mList = null;
mListShown = false;
mEmptyView = mProgressContainer = mListContainer = null;
mStandardEmptyView = null;
super.onDestroyView();
}

在此函数中,Google 开发人员将所有在 ListFragment 中声明的 View 字段设置为 Null,并删除回调“mRequestFocus”。

ListActivity 源代码中。谷歌开发者实现如下:

protected ListAdapter mAdapter;
protected ListView mList;

private Handler mHandler = new Handler();


@Override
protected void onDestroy() {
mHandler.removeCallbacks(mRequestFocus);
super.onDestroy();
}

我没有看到 Google 开发人员在 ListActivity 的 onDestroy 上将 Null 设置为 mList,就像他们为 ListFragment 类所做的那样。

我的问题是

  1. 为什么google开发者在ListActivity的onDestroy中没有将Null设置为mList?有什么原因吗?

  2. 是否需要将Activity的onDestroy和Fragment的onDestroyView中的所有View字段都设置为Null?

3. Activity的onDestroy和Fragment的onDestroyView这两个函数设置Null有什么做法吗?

感谢您的想法!

最佳答案

所以 Fragment 和 Activities 不同的原因是它们的生命周期不同。当一个 Activity 被销毁时,它会永远消失。但是,Fragments 可能会在实际销毁之前多次创建和销毁它们的 View 。为澄清起见,在 Activity 中:

onDestroy()
onCreate()

永远不会按顺序发生同一个 Activity 实例。对于 Fragment,以下内容是完全有效的:

onCreate()
onCreateView()
onDestroyView()
onCreateView()
onDestroyView()
onDestroy()

Fragment 进入后台堆栈时,您可以看到这种情况。它的 View 将被销毁(因为它不再可见),但是当用户按下返回以返回它时,实例将保留在周围以便轻松恢复(此时将再次调用 onCreateView() )。

onDestroyView() 之后,您可以(并且可能应该)释放所有 View 引用以允许它们被垃圾回收。在许多情况下,这不是必需的,就像它只是在配置更改期间发生一样,onDestroy() 将立即跟进,整个实例将被垃圾回收。

从本质上讲,我会说在 onDestroyView() 中释放所有 View 引用是一种很好的做法,如果您的应用具有较大的后栈,则可以节省相当多的内存。

关于android - Activity的onDestroy/Fragment的onDestroyView设置Null做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26369905/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com