Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.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 onCreate()更改我的变量_Java_Android_Null_Super_Oncreate - Fatal编程技术网

Java onCreate()更改我的变量

Java onCreate()更改我的变量,java,android,null,super,oncreate,Java,Android,Null,Super,Oncreate,我最近开始了Android编程,遇到了很多问题,但除了这个问题之外,其他问题都解决了。为了简单起见,我将尝试总结正在发生的事情 我有一个MainActivity,它有一个静态数组列表 我进入一个子活动,在其中更改MainActivity的ArrayList的值 我离开子活动,进入MainActivity 我检查了这个ArrayList的值,现在它包含空值 将Logcat语句放在MainActivity.oncreate()中的super.oncreate()调用之前和之后,我可以看到supe

我最近开始了Android编程,遇到了很多问题,但除了这个问题之外,其他问题都解决了。为了简单起见,我将尝试总结正在发生的事情

  • 我有一个MainActivity,它有一个静态数组列表
  • 我进入一个子活动,在其中更改MainActivity的ArrayList的值
  • 我离开子活动,进入MainActivity
  • 我检查了这个ArrayList的值,现在它包含空值
将Logcat语句放在MainActivity.oncreate()中的super.oncreate()调用之前和之后,我可以看到super.oncreate()的某些部分将ArrayList中以前正确的值更改为null

在重要的情况下,此静态ArrayList包含自定义(可序列化)对象,每个对象都包含一个自定义(可序列化)对象的ArrayList,这些对象的值本身为null

如果这令人困惑,我将尝试用伪代码表示它:

static ArrayList<CustomObject>

CustomObject{ 
      ArrayList<OtherCustomObject> //values of this ArrayList become null
}
静态数组列表
自定义对象{
ArrayList//此ArrayList的值变为null
}

当然,如果需要更多的信息,我会尽力提供更多的信息。

静态数据会一直存在到

  • 虚拟机关闭
  • 进程终止,或者
  • 该类已卸载

  • 在您描述的案例中,这些都没有发生。VM已启动,进程正在运行,Dalvik不会卸载类。请提供其他信息以重新处理该问题。

    无论您的情况下为什么会发生这种情况,在静态变量中存储这样的列表并期望它在那里(没有计划重新创建它)都不是一个好主意,因为系统可能会在内存不足时决定终止您的进程。当用户尝试重新输入你的应用程序时,当系统尝试重新创建活动时,你将有空值


    如果数据很重要,请将其写入一个文件(您说过该文件已可序列化),并在启动主活动时读取该数据。

    这可能有助于您处理多个线程吗?(在这种情况下需要使用volatile)。请发布一些更改值和启动活动方式的代码。@ramaral他不需要保存活动状态,这是一个静态变量。另一个想法是,由于某种原因,整个过程正在被破坏和重新启动,但是无法从发布的内容中得知。如果您没有显式地将这些值设置为null,那么它应该可以正常工作,可能是在其他活动转到onDestroy()时。。活动代码将在这方面对我们有很大帮助,否则我认为我们帮不了太多….(现在在手机上,在电脑上时会挖掘参考资料)同意。除非您说“将其写入文件”-中的“outState”捆绑包不是最自然的选择吗?取决于即使用户退出活动(或手机重新启动等),数据是否需要持久化。如果系统破坏并重新创建进程,则outState捆绑包将继续存在,但在我刚才提到的情况下不会。