在片段的视图上强制onDestroyView

时间:2015-07-31 18:22:41

标签: android android-fragments memory-management android-lifecycle ondestroy

我正在编写一个应用程序,用于加载用户个人资料和用户对不同位置的评分。该应用程序普遍使用片段,从配置文件跳转到评级位置相对容易。

当用户点击个人资料并进入评分位置时,他们可以点击评分位置的其他个人资料并继续操作。

我遇到的问题与内存有关,当我查看排名的位置并点击个人资料时,我会从一个活动切换到另一个活动。在这两个活动中,在setContentView之后,我将一个片段动态加载到布局空间中。

现在,当我在这些活动之间穿梭时,几乎总是调用onSaveInstance状态,但是由于Fragment在活动切换之前显示前景中的内容,因此不会调用onDestroyView。

我想要的是在这些动态片段中调用onSaveInstanceState时,它也会强制调用onDestroyView。

onDestroyView似乎唯一被调用的时候就是我将一个Fragment添加到后台堆栈。当另一个活动到达前台并停止此片段时,我也希望在DestroyView上调用它。

我想实现的当前解决方法是有一个没有视图的空片段,每次调用startActivity(Intent i)时,加载这个虚拟片段来销毁视图并启动下一个活动。然后,当我回来时,将它从后台堆栈弹出并恢复实际的最后一个片段。

然而,这似乎过分了。因此,对于停止活动中停止的片段,并在其前面有一个新活动,我该如何强制它破坏它的视图?

1 个答案:

答案 0 :(得分:0)

首先,您不应强迫或满足onDestroyView来修复您的代码,这是FragmentManager和Android生命周期@ Pausing and Resuming an Activity的工作。如果您要使用现有代码,请使用其他覆盖方法onPause()或onStop()。

如果没有发布代码,我假设您使用replace()方法将一个片段显示在另一个片段上。这或多或少迫使你自己管理片段,一些开发人员实际上是通过一些努力成功地做到这一点(看看其他SO问题)。 所以我的建议是:

  • 维护自己的状态,并根据状态显示正确的片段。
  • 使用 BackStack ,让Fragment管理处理堆栈/状态。