Android - 对 Class 对象的最终静态引用会导致内存泄漏吗?
Android - can a final static reference to a Class object cause memory leak?
在我的应用程序中,我有几个选项卡,用户可以在同一选项卡中的不同片段之间切换(我为此使用了嵌套片段)。
为了指定哪个片段是每个选项卡的默认("the first"),我定义了以下静态映射:
/**
This map is used in order to map tab's tags into default fragments for these tabs
*/
public static final Map<String, Class> DEFAULT_TAB_FRAGMENT_MAP;
static {
Map<String, Class> map = new HashMap<String, Class>();
map.put(HOME_TAB_TAG, HomeFragment.class);
map.put(HISTORY_LIST_TAB_TAG, HistoryFragment.class);
map.put(HISTORY_CLOCK_TAB_TAG, HistoryClockFragment.class);
map.put(SETTINGS_TAB_TAG, SettingsFragment.class);
map.put(EXTRAS_TAB_TAG, ExtrasFragment.class);
DEFAULT_TAB_FRAGMENT_MAP = Collections.unmodifiableMap(map);
}
上面的地图允许我查询特定选项卡(由字符串标记定义)的默认片段的 Class。
在某些时候,我意识到我的应用程序存在内存泄漏 - 即使我的应用程序处于后台,垃圾收集器也像疯子一样工作。会不会是对Class变量的静态引用导致内存泄漏?
在我获得了 2 年的 Android 开发经验(以及 Java 的一般经验之后),我认为我可以回答我自己的新手问题:不,静态参考 class 对象不会导致内存泄漏。
在我的应用程序中,我有几个选项卡,用户可以在同一选项卡中的不同片段之间切换(我为此使用了嵌套片段)。
为了指定哪个片段是每个选项卡的默认("the first"),我定义了以下静态映射:
/**
This map is used in order to map tab's tags into default fragments for these tabs
*/
public static final Map<String, Class> DEFAULT_TAB_FRAGMENT_MAP;
static {
Map<String, Class> map = new HashMap<String, Class>();
map.put(HOME_TAB_TAG, HomeFragment.class);
map.put(HISTORY_LIST_TAB_TAG, HistoryFragment.class);
map.put(HISTORY_CLOCK_TAB_TAG, HistoryClockFragment.class);
map.put(SETTINGS_TAB_TAG, SettingsFragment.class);
map.put(EXTRAS_TAB_TAG, ExtrasFragment.class);
DEFAULT_TAB_FRAGMENT_MAP = Collections.unmodifiableMap(map);
}
上面的地图允许我查询特定选项卡(由字符串标记定义)的默认片段的 Class。
在某些时候,我意识到我的应用程序存在内存泄漏 - 即使我的应用程序处于后台,垃圾收集器也像疯子一样工作。会不会是对Class变量的静态引用导致内存泄漏?
在我获得了 2 年的 Android 开发经验(以及 Java 的一般经验之后),我认为我可以回答我自己的新手问题:不,静态参考 class 对象不会导致内存泄漏。