【发布时间】:2023-03-18 04:11:01
【问题描述】:
我的应用程序中有一个特殊的片段流,因此我需要能够切换到任何片段,同时尽可能将片段保留在内存中(所以如果内存紧张,可以释放片段) .
到目前为止,我已经成功地替换了当前片段,但问题是前一个片段总是被破坏,所以如果我回到它(例如使用操作栏),它会重新-创建,这需要一些时间。
我使用片段而不是活动的原因是操作栏的良好使用、将多个片段放在同一个容器中的能力、不灵活的活动意图使用等等......
我不使用“返回”堆栈的原因是我希望从任何片段转到任何片段,因为流程可以改变。
这是我的代码的 sn-p:
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 确定它的内存不足会发生什么 - 它会破坏未使用的片段(这很好)还是会导致内存不足异常(这很糟糕)。
【问题讨论】:
-
你的问题在哪里?我们能帮你什么吗?是关于创建片段时的延迟吗?您是否检查了显示片段所需的基础数据创建?
标签: android android-activity transactions fragment flow