【问题标题】:using static variables in android在android中使用静态变量
【发布时间】:2010-12-29 17:01:15
【问题描述】:

在我的 mainActivity 中,我声明这样的静态列表:

public static List<Map<String, String>> ArrList = new ArrayList<Map<String, String>>();

然后在其他活动中,我使用 mainActivity.ArrList 访问此列表 ... 我几乎可以肯定我不应该这样做,但无论如何,我想更好地理解这一切......

所以,这是我的问题: 1)据我所知,由于内存不足或其他原因,我的 mainActivity 可能会被破坏(而另一个活动是焦点),在这种情况下,我的 ArrList 也会被破坏。是对的吗? 2)当我退出,然后重新启动时,我的应用程序崩溃并且调试器报告 OutOfMemory。我假设在重新启动时,android 会为我的静态列表分配另一块内存。所以,我也假设我应该在 Activity 结束时销毁静态列表。如何正确地做到这一点?

感谢您对此事的任何其他建议。

【问题讨论】:

标签: android variables static


【解决方案1】:
  1. 您可以使用静态变量 - 对此没有任何限制(除非非常不希望将静态变量保存在 Activity/Context 对象中)。还有一些人不喜欢使用静态的,说它不是很“时尚”

  2. 如果您要在销毁 Activity 时销毁静态列表 - 这意味着您不需要静态列表,对吧?当您需要给定类的所有实例通用的东西时,静态变量很有用。

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

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

    在这种情况下,您需要在 android manifest (look here) 中声明 MyApp

【讨论】:

    【解决方案2】:
    1. 当您的进程被终止时,您的静态 ArrayList 的值将被清除(导致一个空列表,但仍然有效且不为空)。从被杀中恢复后,您需要重新加载列表

    2. 1234563双+值)。 ArrList.clear();

    当您开始将应用程序编码为对多任务处理友好(能够从被杀死中完全恢复)时,使用这样的全局静态列表可能会让人头疼。任何使用此列表的活动都必须能够自行恢复并在需要时重新填充列表。

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 2017-05-13
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多