Fragment
好的,我用一些 UI(几个文本框和东西)创建了一个,我使用了一个,setRetainInstance
因为我运行一个AsyncTask
来查询服务器(请求只能发送一次),我需要AsyncTask
. 所以我的问题是:用 UI 保留整个片段是错误的吗?我看到了几个例子,人们使用额外的Fragment
来使用setRetainInstance
但是..不使用额外的有什么问题吗?如果使用有问题,那是setRetainInstance
为什么?在文档中找不到与此相关的任何信息。
问问题
1234 次
2 回答
2
即使你使用setRetainInstance(true)
,当你旋转时,你的 Fragment 仍然会重新创建它的视图(你会接到调用onDestroyView
then onCreateView
)。只要您不保留对过去视图的引用onDestroyView
,就不会出现旧 Activity 的任何泄漏。最好的方法是将 中的引用显式地设为空onDestroyView
,但您的代码onCreateView
通常会覆盖这些引用。
网上有很多例子(包括一些官方的),人们使用单独的片段(没有视图)来保留数据。假设我上面说的是正确的,那么这是不必要的(为了防止泄漏)。在许多情况下,如果您使用一个单独的片段,该片段的职责只是处理数据而不担心 UI,那么您最终可能会得到更清晰的代码/架构。
您可以使用 Eclipse MAT检查旋转后是否泄漏 Activity 上下文。
于 2013-05-13T11:28:46.020 回答
-1
如果您锁定了方向,那么您应该没问题。否则,如果您保留与特定活动实例关联的小部件,最终可能会导致内存泄漏。
于 2012-09-06T17:30:06.447 回答