7

Fragment好的,我用一些 UI(几个文本框和东西)创建了一个,我使用了一个,setRetainInstance因为我运行一个AsyncTask来查询服务器(请求只能发送一次),我需要AsyncTask. 所以我的问题是:用 UI 保留整个片段是错误的吗?我看到了几个例子,人们使用额外的Fragment来使用setRetainInstance但是..不使用额外的有什么问题吗?如果使用有问题,那是setRetainInstance为什么?在文档中找不到与此相关的任何信息。

4

2 回答 2

2

即使你使用setRetainInstance(true),当你旋转时,你的 Fragment 仍然会重新创建它的视图(你会接到调用onDestroyViewthen onCreateView)。只要您不保留对过去视图的引用onDestroyView,就不会出现旧 Activity 的任何泄漏。最好的方法是将 中的引用显式地设为空onDestroyView,但您的代码onCreateView通常会覆盖这些引用。

网上有很多例子(包括一些官方的),人们使用单独的片段(没有视图)来保留数据。假设我上面说的是正确的,那么这是不必要的(为了防止泄漏)。在许多情况下,如果您使用一个单独的片段,该片段的职责只是处理数据而不担心 UI,那么您最终可能会得到更清晰的代码/架构。

您可以使用 Eclipse MAT检查旋转后是否泄漏 Activity 上下文。

于 2013-05-13T11:28:46.020 回答
-1

如果您锁定了方向,那么您应该没问题。否则,如果您保留与特定活动实例关联的小部件,最终可能会导致内存泄漏。

于 2012-09-06T17:30:06.447 回答