我的应用程序中有一个特殊的片段流,因此我需要能够切换到任何片段,同时尽可能将片段保留在内存中(所以如果内存紧张,可以释放片段)。
到目前为止,我已经成功地替换了当前片段,但问题是前一个片段总是被破坏,所以如果我回到它(例如使用操作栏),它会重新创建并这需要一些时间。
我使用片段而不是活动的原因是操作栏的良好使用,将多个片段放入同一个容器中的能力,非灵活的活动意图使用等......
我不使用“返回”堆栈的原因是我希望从任何片段转到任何片段,因为流程可以改变。
这是我的代码片段:
Fragment fragment=... ; //get the fragment from cache or create if not available yet...
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.mainActivity_fragmentContainer, fragment).commit();
我也尝试过使用 ViewPager,但由于我不想具有滑动效果(它允许您滑动到其他片段)并且由于其中一个片段已经包含 viewPager,所以它是一个障碍。禁用主 viewPager 上的滑动效果会以某种方式在另一个上禁用它。
顺便说一句,我使用的是片段的 android 支持库,而不是原生 API。
我的问题是:我如何才能完全控制要转到哪个片段,同时最大限度地提高速度并避免太多内存用于片段?
编辑:现在,我使用下一个解决方法:对于 onDestroyView,我采用创建视图的父级并从那里删除创建的视图。
对于 onCreateView ,如果我已经拥有之前创建的视图,我会返回它。
但是,我认为这是一件非常冒险的事情,因为我不确定片段管理是如何工作的,所以它可能会导致奇怪的问题。另外,我不确定如果 android 确定它的内存不足会发生什么 - 它会破坏未使用的片段(这很好)还是会导致内存不足异常(这很糟糕)。