每个片段仅创建一个实例

时间:2019-11-20 16:52:14

标签: android android-fragments android-navigation

在我的应用程序中,我遇到以下情况:我正在从Web服务中提取某种图形,其中每个节点代表一个屏幕,节点之间的边缘是屏幕之间可能的过渡。每个节点都配备有一种类型,该类型决定屏幕上显示哪个Fragment。由于图形可能会变得非常大,因此我不想为每个节点创建一个新的Fragment。我还希望负担能力由我自己管理片段的BackStack。

我正在使用新的NavigationComponent,我认为这样创建自己的FragmentFactory会很明智:

public class MyFragmentFactory extends FragmentFactory {
    private Map<String, Fragment> cache = new HashMap<>();

    @Override
    public Fragment instantiate( ClassLoader classLoader, String className) {
        Fragment cachedFragment = cache.get(className);
        if(cachedFragment != null) return cachedFragment;

        cachedFragment = super.instantiate(classLoader, className);
        cache.put(className, cachedFragment);
        return cachedFragment;
    }
}

然后,我将每个Fragment添加到导航图中,并使用全局操作来启动它。这使我有机会为每种节点类型创建一个Fragment实例。问题在于它弄乱了Fragments的生命周期。例如,由于片段已连接,因此无法从一个节点浏览到具有相同类型的另一个节点。同样,Glide之类的库也取决于Fragment的生命周期,因此很可能崩溃。那么我应该如何处理呢?

我真的必须关注内存消耗,因此只想创建尽可能少的碎片。

0 个答案:

没有答案