我需要预加载复杂的布局,以便我可以在第一次更快地显示活动:
LayoutInflater inflater = (LayoutInflater) mainActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
SlowActivity.cachedView = inflater.inflate(R.layout.activity_layout, null, false);
当SlowActivity开始时......
public static View cachedView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(this.cachedView);
}
}
我找不到我读到的地方,但是有人说我正在使用stati变量进行内存泄漏来存储膨胀的布局。
为什么?
也许我需要在活动被销毁时释放一些资源(从来没有,它总是放在后台......)
答案 0 :(得分:3)
这是因为布局与所有视图一样,都引用了包含它的活动。
因此,在活动关闭并且应该被释放之后,静态变量保存对引用此活动的视图的引用,因此应用程序占用的内存超出应有的数量。
视图不是您应该尝试避免使用静态变量进行缓存的唯一变量。一个例子是drawables,如here所示。
答案 1 :(得分:1)
因为Android每次需要内存时都可以(并且会)破坏你的应用程序/活动(包括静态变量!)。所以当你需要创建静态变量时,你必须考虑它。否则,在应用程序处于非活动状态后,您会发现很奇怪且很难找到崩溃。