gpt4 book ai didi

java - 安卓/Java : Fragment instantiating causes memory leak?

转载 作者:行者123 更新时间:2023-11-30 00:19:16 24 4
gpt4 key购买 nike

我的 MainActivity 有一个 Drawer 并根据点击的 MenuItem 实例化一个新的 Fragment(基于this tutorial ).

我监控了内存,它在每次 Fragment 更改时都略微增加,我担心,fragmentClass.newInstance() 不是正确的方式。

// MainActivity
public boolean onNavigationItemSelected(MenuItem item) {

int id = item.getItemId();
Fragment fragment = null;
Class fragmentClass = null;
if (id == R.id.nav_camera) {
fragmentClass = CameraFragment.class;
} else if (id == R.id.nav_gallery) {
fragmentClass = GalleryFragment.class;
} else if (id == R.id.nav_slideshow) {
fragmentClass = SlideshowFragment.class;
} else if (id == R.id.nav_manage) {
fragmentClass = ManageFragment.class;
} else if (id == R.id.nav_share) {
fragmentClass = ShareFragment.class;
} else if (id == R.id.nav_send) {
fragmentClass = SendFragment.class;
}

try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}

FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.layout_main, fragment).commit();
}

我希望是这样的:

// Pseudocode
if (fragmentManager.instanceExists(fragmentClass)) {
// load instantiated fragment
} else {
// newInstance()
}

我怎样才能避免内存泄漏或者这是否相关?

谢谢!

最佳答案

实际上,该代码没有问题。您可以优化的是:

  1. 修改 Fragment#instantiate() 方法(检查 docs )
  2. Map 之类的东西中缓存实例,以免每次在抽屉中导航时都创建新实例

此外,您可以使用 FragmentManager#findFragmentById()FragmentManager#findFragmentByTag()

检查 FragmentManager 中是否存在 fragment

关于java - 安卓/Java : Fragment instantiating causes memory leak?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46612765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com