gpt4 book ai didi

java - 在 Android 应用程序中保留所有 Activity 的列表有什么用?

转载 作者:行者123 更新时间:2023-12-01 10:50:30 25 4
gpt4 key购买 nike

我在某人的代码中遇到了下面的 ApplicationManager 类。这个类基本上保留了所有已开始 Activity 的列表。

我查了一下,发现这个类只在以下两种情况下使用:

  1. 在每个 activityoncreate() 中:ApplicationManager.getInstance().addActivity(this); 将启动的 Activity 添加到列表。
  2. 当应用程序关闭时,调用
  3. ApplicationManager.getInstance().applicationExit(); 来完成列表中的每个 Activity 。

所以这是我的问题...这真的需要吗?如果我不这样做,会有什么后果?应用关闭后应用中的Activity还会占用内存吗?

谢谢!!

public class ApplicationManager {
private List<Activity> activityList = new LinkedList<Activity>();
private static ApplicationManager appManager;

/**
* singleton
*/
public static ApplicationManager getInstance(){
if(appManager == null){
synchronized (ApplicationManager.class) {
if(appManager == null){
appManager = new ApplicationManager();
}
}
}
return appManager;
}

/**
* add Activity
*/
public void addActivity(Activity activity){
activityList.add(activity);
}


/**
* application exit
*/
public void applicationExit(){
if(WPApplication.DEBUG){
Log.i("applicationExit", "alist:" + activityList.size());
}
while(activityList.size() > 0){
if(WPApplication.DEBUG){
Log.i("applicationExit", "remove--");
}
activityList.get(0).finish();
activityList.remove(0);
}
}

}

最佳答案

没有。永远不要这样做。

这只是内存泄漏的一个根源。 Android系统可以随时关闭任何Activity,并且该类将保留所有它们的句柄,无论它们是否存在。

垃圾收集将无法运行,因为句柄使对象保持“Activity 状态”

另请考虑这一点:

旋转设备会导致 Activity 重新启动(再次调用其 OnCreate)。每次旋转设备时,都会重新创建 Activity 并将新指针添加到列表中。指向同一 Activity 的所有其他指针本质上都已死亡,但占用了内存。每个 Activity 中的每个 View 都将保持 Activity 状态,因为它们的上下文( Activity )仍然存储有引用。

如果不断旋转设备,实际上可能会耗尽内存。

关于java - 在 Android 应用程序中保留所有 Activity 的列表有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33941212/

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