Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中的大型公共静态变量_Java_Android_Memory Management_Static_Scope - Fatal编程技术网

Java Android中的大型公共静态变量

Java Android中的大型公共静态变量,java,android,memory-management,static,scope,Java,Android,Memory Management,Static,Scope,嘿,我正在制作一个测验应用程序,我需要将多达100个“问题”对象的ArrayList从一个活动传递到另一个活动。问题对象有大约6个参数,都是非常小的字符串。我正在寻找实现这一点的方法,其中提到的一种方法是在一个类中将其声明为公共静态变量,然后在另一个类中引用它。我想知道以下几点: 我需要先“实例化”ArrayList,然后才能使用它,还是只声明变量?例如: ArrayList<Question> QuestionBank = new ArrayList<Question>

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

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

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

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

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

  • 您需要在“使用”if之前实例化它。我所说的“使用”是指对其调用方法。无论您在何处实例化它,第一个或第二个活动都无关紧要

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

  • 它使用内存(RAM),而不是文件中的数据(使用闪存)。但是,在某些情况下,您需要将其存储在内存中,因此它在任何情况下都会使用此内存

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

  • 顺便说一句,有几个选项可以在应用程序内共享数据:

  • 通过
    Intent.setExtra()
    /
    Intent.getXXXExtra()
  • 具有静态变量的类
  • 通过命名的
    应用程序
    类,该类是单个实例,在整个应用程序生命周期中处于活动状态
  • 答复:

  • 您需要在“使用”if之前实例化它。我所说的“使用”是指对其调用方法。无论您在何处实例化它,第一个或第二个活动都无关紧要

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

  • 它使用内存(RAM),而不是文件中的数据(使用闪存)。但是,在某些情况下,您需要将其存储在内存中,因此它在任何情况下都会使用此内存

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

  • 顺便说一句,有几个选项可以在应用程序内共享数据:

  • 通过
    Intent.setExtra()
    /
    Intent.getXXXExtra()
  • 具有静态变量的类
  • 通过命名的
    应用程序
    类,该类是单个实例,在整个应用程序生命周期中处于活动状态

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


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

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


    我相信最好的解决方案(如上所述)是让你的
    问题
    可分组
    。然后在Activity
    Intent.setExtra
    方法中设置数据。当您的其他活动开始时,您阅读了
    意图中的问题,然后您的所有数据都很好地符合活动的生命周期,这样您的活动就更易于重用。

    您的声明都无效-您没有指定名称…哦,不!对不起,忘记指定名称了-我一直在编写自定义ArrayList时都犯了这个错误…您的声明都无效-您没有指定名称…哦,不!对不起,忘了指定名称-我实际上犯了这个错误,当我写自定义数组列表的所有时间…感谢这样一个完整的答案,彼得-正是我所希望的!谢谢你这么完整的回答,彼得-正是我所希望的!
    ArrayList<Question> QuestionBank;