【问题标题】:Large public static variables in AndroidAndroid中的大型公共静态变量
【发布时间】:2012-02-03 15:15:00
【问题描述】:

嘿,我正在制作一个测验应用程序,我需要将一个包含多达 100 个“问题”对象的 ArrayList 从一个活动传递到另一个活动。 Question 对象有大约 6 个参数——都是非常小的字符串。我正在寻找执行此操作的方法,其中提到的方法之一是将它声明为一个类中的公共静态变量,然后在另一个类中引用它。我想知道以下几点:

  • 我需要先“实例化” ArrayList 才能使用它,还是我可以只声明变量?如:

    ArrayList<Question> QuestionBank = new ArrayList<Question>();
    

    ArrayList<Question> QuestionBank;
    
  • 如果我在一个活动中声明此变量,当我在另一个活动中时它如何保持可用?它所声明的活动是否一直在运行?

  • 这是一个非常消耗内存的方法吗?有没有更有效但相对直接的方法?
  • 如果我在使用完变量后声明它为null,它会释放之前使用的所有空间对吗?

【问题讨论】:

  • 您的声明均无效 - 您尚未指定名称...
  • 哦不!抱歉忘记指定名称 - 实际上我一直在编写自定义 ArrayLists 时犯了这个错误......

标签: java android memory-management static scope


【解决方案1】:

答案:

  1. 您需要在“使用” if 之前对其进行实例化。 “使用”是指调用它的方法。无论您在哪里实例化它,第一个或第二个活动。

  2. 静态字段也称为类字段,因为它们是通过类而不是通过对象实例访问的。结果是,对于静态字段,您始终只有一个实例,例如MyClass.someField 可在整个应用程序中使用,并且只有其中一个。

  3. 它使用内存 (RAM) 而不是文件中的数据(使用闪存)。但是,在某些时候你需要把它放在内存中,所以无论如何它都会使用这个内存。

  4. 是的,如果只是临时需要,可以在不再需要后将该字段设置为null,内存将被释放(最终在gc运行时)。

    李>

顺便说一句,在应用内共享数据有几个选项。:

  1. 通过Intent.setExtra()/Intent.getXXXExtra()在活动之间传递数据
  2. 具有静态变量的类
  3. 通过名为 Application 的类,该类是单实例且在整个应用生命周期中保持活动状态
  4. Shared preferences
  5. Database
  6. Internal storage

【讨论】:

  • 感谢彼得如此完整的回答 - 正是我所希望的!
【解决方案2】:

我认为您不想将静态数据从一个活动读取到另一个活动,这是一种无疑会导致问题/副作用的解决方案。最好保持活动尽可能解耦。

我相信最好的解决方案(如上所述)是让你的QuestionsParcable。然后在ActivityIntent.setExtra方法中设置数据。当您的其他活动开始时,您会阅读来自Intent 的问题,然后您的所有数据都很好地适合活动的生命周期,并且您的活动可以通过这种方式更加可重用。

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 2015-03-19
    • 2011-09-23
    • 2014-03-15
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多