使用UI Android的setRetainInstance片段

时间:2012-05-16 22:23:58

标签: android android-asynctask android-fragments

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

2 个答案:

答案 0 :(得分:2)

即使您使用setRetainInstance(true),您的片段仍会在您轮播时重新创建其视图(您将调用onDestroyView然后onCreateView)。只要您不保留对onDestroyView之后的视图的引用,旧活动就不会有任何泄漏。最好的方法是明确地使onDestroyView中的引用为空,但是onCreateView中的代码通常会覆盖这些引用。

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

您可以在using Eclipse MAT之后检查是否在泄露活动上下文。

答案 1 :(得分:-1)

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