在android中使用静态变量

时间:2010-12-29 17:01:15

标签: android variables static

在我的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。怎么做得好?

我很欣赏有关此事的任何其他建议。

2 个答案:

答案 0 :(得分:1)

  1. 您可以使用静态变量 - 对此没有限制(除了非常不希望保留在静态变量Activity / Context对象中)。也有些人不喜欢使用静态的,说它不是很“时尚”

  2. 如果您要在销毁活动时销毁静态列表 - 这意味着您不需要静态列表,是吗?当您需要在给定类的所有实例中都有共同点时,静态变量很有用。

  3. 存储全局变量的最佳位置是扩展Application类,声明可以通过getter / setter访问私有成员,例如:

    public class MyApp extends Application
    {
        private List<Map<String, String>> ArrList;
    //...
    }
    

    在这种情况下,您需要在Android清单(look here)中声明MyApp

答案 1 :(得分:0)

  1. 当您的进程被终止时,您的静态ArrayList将被清除其值(导致列表为空,但仍然有效且不为空)。在你从被杀害中恢复后,你需要重新加载清单

  2. 这个静态数组可能会在你“退出”你的应用程序之后保留它的值(但不会在它的进程被杀死之后),所以请确保在退出之前清除数组,因此它不会再次填满(添加)加倍+值)。 ArrList.clear();

  3. 当您开始编写应用程序以使其对多任务友好(能够完全从被杀死中恢复)时,使用这样的全局静态列表会变得令人头疼。任何使用此列表的活动必须能够自行恢复,并在需要时重新填充列表。