dou*_*ubt 2 android android-fragments
我没有在我的片段中保存任何上下文,所以我setRetainInstance(true)在UI片段中使用.谁能告诉我这是否是正确的方法?我们应该在哪里基本上调用setRetainInstance方法?我的意思onCreate还是onActivityCreated等
当您查看参考时,您会看到:
onDestroy() will not be called (但是onDetach()仍然会,因为片段正在与其当前活动分离).onCreate(Bundle) will not be called 因为片段没有被重新创建.onAttach(Activity)和onActivityCreated(Bundle) will still be called.此方法用于在配置更改时保留片段.您需要在第一次创建时在片段中设置此方法.如果您在上面看到onAttach或者onActivityCreated仍然会在旋转后调用,请不要在内部设置该方法,因为您将再次调用它.这毫无用处...!最好的方法是调用setRetainInstanceinside onCreate方法,因为在更改旋转后不再调用 last .
一切都取决于你想要什么,你的FragmentActivity和片段.我将回答Alex Lockwood 的一句话:
保留的片段对于跨活动实例传播状态信息(尤其是线程管理)非常有用.例如,片段可以充当Thread或AsyncTask实例的主机,从而管理其操作.有关详细信息,请参阅我关于此主题的博客文章.
一般来说,我会把它与使用onConfigurationChanged与Activity一样对待...不要仅仅因为你太懒而无法正确实现/处理方向更改而将它用作绑定.只在需要时使用.
我会尽量简化一下。
您的片段可能包含UI元素-如:
private TextView mView
这些UI元素onCreateView(LayoutInflater, ViewGroup, Bundle)使用LayoutInflater类实例在片段的方法中初始化。
但是此LayoutInflater实例使用Activity的上下文来膨胀您的资源。因此,如果您的UI小部件存储在您的片段类中,则它们隐式拥有Context相关活动的,即您通过commit FragmentManager的事务将其附加到的活动。
现在,假设发生配置更改(例如屏幕旋转)。Activity被摧毁,并创建一个新的。Old Activity的上下文通常应该被垃圾收集。但是您保留的片段实例通过您存储的每个UI元素对此上下文都有很强的引用,因此就GC而言,此上下文 是“可访问的”,因此不应进行垃圾回收。发生内存泄漏。
这就是为什么保留的实例片段不应用作UI片段的原因。
请记住- 即使您不存储对Context对象的引用private Context context(例如您所要求的),也可能会以很多可能性泄漏此上下文。
| 归档时间: |
|
| 查看次数: |
6449 次 |
| 最近记录: |