Android中的大型公共静态变量

时间:2012-01-05 19:32:16

标签: java android memory-management static scope

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

  • 我可以在使用之前“实例化”ArrayList,还是只需声明变量?如:

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

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

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

2 个答案:

答案 0 :(得分:4)

数目:

  1. 您需要在“使用”if之前对其进行实例化。 “使用”我的意思是呼叫方法。在实例化它,第一次或第二次活动无关紧要。

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

  3. 它使用内存(RAM)而不是文件中的数据(使用闪存)。但是,在某些时候你需要将它放在内存中,所以它在任何情况下都使用这个内存。

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

  5. 顺便说一句,有几种方法可以在应用程序内共享数据:

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

答案 1 :(得分:0)

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

我认为最佳解决方案(如上所述)是为了QuestionsParcable。然后在Activity Intent.setExtra方法中设置数据。当您的其他活动开始时,您会阅读Intent中的问题,然后您的所有数据都会在活动的生命周期中很好地适应,并且您的活动可以通过这种方式重复使用。