在我的mainActivity中,我声明静态List,如下所示:
public static List<Map<String, String>> ArrList = new ArrayList<Map<String, String>>();
然后在其他活动中,我使用mainActivity.ArrList访问此列表... 我几乎可以肯定我不应该这样做,但无论如何,我想更好地了解所有这一切......
所以,这是我的问题: 1)据我所知,由于内存不足或其他原因,我的mainActivity可能会被破坏(而另一个活动是焦点),在这种情况下我的ArrList也会被破坏。是对的吗? 2)我退出,然后重新启动,我的应用程序崩溃和调试程序报告OutOfMemory。我假设在重启时android会为我的静态List分配另一块内存。所以,我还假设我应该在Activity结束时销毁静态List。怎么做得好?
我很欣赏有关此事的任何其他建议。
答案 0 :(得分:1)
您可以使用静态变量 - 对此没有限制(除了非常不希望保留在静态变量Activity / Context对象中)。也有些人不喜欢使用静态的,说它不是很“时尚”
如果您要在销毁活动时销毁静态列表 - 这意味着您不需要静态列表,是吗?当您需要在给定类的所有实例中都有共同点时,静态变量很有用。
存储全局变量的最佳位置是扩展Application类,声明可以通过getter / setter访问私有成员,例如:
public class MyApp extends Application
{
private List<Map<String, String>> ArrList;
//...
}
在这种情况下,您需要在Android清单(look here)中声明MyApp
答案 1 :(得分:0)
当您的进程被终止时,您的静态ArrayList
将被清除其值(导致列表为空,但仍然有效且不为空)。在你从被杀害中恢复后,你需要重新加载清单
这个静态数组可能会在你“退出”你的应用程序之后保留它的值(但不会在它的进程被杀死之后),所以请确保在退出之前清除数组,因此它不会再次填满(添加)加倍+值)。 ArrList.clear();