34 android ondestroy android-fragments android-activity
我正在阅读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();
}
Run Code Online (Sandbox Code Playgroud)
在此函数中,Google开发人员将Null设置为在ListFragment中声明的所有视图字段,并删除回调"mRequestFocus".
在ListActivity源代码中.Google开发人员实施如下:
protected ListAdapter mAdapter;
protected ListView mList;
private Handler mHandler = new Handler();
@Override
protected void onDestroy() {
mHandler.removeCallbacks(mRequestFocus);
super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)
我没有看到Google开发人员在ListActivity的onDestroy上将Null设置为mList,就像他们为ListFragment类所做的那样.
我的问题是
为什么谷歌开发者没有在ListActivity的onDestroy中将Null设置为mList?有什么原因?
我们是否需要将Null设置为Activity的onDestroy和Fragment的onDestroyView中的所有View字段?
3.在这两个函数中设置Null的任何做法:Activity的onDestroy和Fragment的onDestroyView?
谢谢你的想法!
kco*_*ock 63
因此,碎片与活动之间存在差异的原因是因为它们的生命周期不同.当一个Activity被摧毁时,它会永远消失.但是,Fragments可能会在实际销毁之前多次创建和销毁他们的视图.有关说明,请参阅活动:
onDestroy()
onCreate()
Run Code Online (Sandbox Code Playgroud)
永远不会按顺序发生同一个Activity实例.对于片段,以下内容完全有效:
onCreate()
onCreateView()
onDestroyView()
onCreateView()
onDestroyView()
onDestroy()
Run Code Online (Sandbox Code Playgroud)
您可以看到这种情况的一种情况是当Fragment进入后栈时.它的视图将被销毁(因为它不再可见)但是当用户按下以返回它时,实例将保持在周围以便轻松恢复(此时onCreateView()将再次调用它).
之后onDestroyView(),您可以(并且可能应该)释放所有View引用以允许它们被垃圾收集.在许多情况下,没有必要,就好像它只是在配置更改期间发生,onDestroy()将立即跟随并且整个实例将被垃圾收集.
从本质上讲,我认为最好释放任何和所有视图引用onDestroyView(),如果你的应用程序有一个大的backstack,可以节省相当多的内存.
| 归档时间: |
|
| 查看次数: |
22781 次 |
| 最近记录: |