android - 了解 fragment Activity 生命周期

标签 android android-fragments android-lifecycle

我创建了一个 Android 应用程序,它使用 ViewPager 滑动浏览三个 fragment (三个 fragment 中的每一个都包含一个 gridview)。

我最近开始学习 fragment ,并假设在我的 GridView 在它们的 fragment 中创建之后,每个 fragment 都会在内存中并且永远不必再次加载。

最近我注意到,当我从左边的 fragment 滑动到中间的 fragment ,然后滑动到右边的 fragment 时,最左边的 fragment 必须用我的适配器再次填充它的 GridView 。

我只是想知道为什么当我从最左边的 fragment 导航到最右边的 fragment 时会发生这种情况,但当我在并排的 fragment 之间导航时却不会。它是否只将最近的 fragment 保留在内存中并杀死另一个 fragment ?还是有其他原因导致应用程序不会将所有三个 fragment 都保存在内存中?当我在 fragment 之间快速导航时,我的应用程序变得有点迟钝和缓慢,所以如果可能的话,只需要绘制每个 GridView 一次会很好。

我在 onCreate() 中填充我的数组列表(用于填充适配器),然后在 onActivityCreated(Bundle savedInstanceState) 中用适配器填充我的 gridview

最佳答案

ViewPager 在内存中保留一定数量的屏幕外标签(当然是 Fragment)。我相信所有设备的默认值都是 1。因此,当您滚动到最右侧时,只有左侧的那个会保留在内存中。

如果您希望您的 ViewPager 将所有选项卡保留在内存中(小心——这在设备或其他正在运行的应用程序上可能很难),您可以设置要保留的屏幕外选项卡数量内存。为此,请使用 setOffscreenPageLimit ViewPager 对象上的 ViewPager 方法。

例子:

ViewPager pager = (ViewPager) findViewById(R.id.pager); // Your pager's ID
pager.setOffscreenPageLimit(2); // Will retain 2 off-screen tabs + your selected tab

希望这对您有所帮助!

关于android - 了解 fragment Activity 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11512061/

相关文章:

Android 应用程序数据库到 Azure

android - 这个 Handler 还会泄露 Context 吗?

Android 应用程序类生命周期文档

java - 有关 BottomSheetDialog 可见性的问题

android - 如何从正常 Activity 中打开列表 fragment

android - 如何删除 fragment onFling手势Android

java - 安卓 : FragmentPagerAdapter don't saved the state of Fragment?

Android - 为什么当我的应用程序恢复时我的 Activity 被破坏?

android Activity 娱乐 - Intent 是否包含原始附加内容?

java - J2ObjC - 安卓库