super.onCreate()改变我的变量

时间:2013-12-29 22:17:00

标签: java android null super oncreate

我最近开始使用Android编程并遇到了很多问题,但是除了这个之外我已经能够解决所有这些问题了。为了简单起见,我将总结一下正在发生的事情。

  • 我有一个MainActivity,它有一个静态ArrayList
  • 我进入子活动,在那里我更改了MainActivity的ArrayList的值
  • 我离开子活动,进入MainActivity
  • 我检查了这个ArrayList的值,它现在包含空值

在MainActivity.onCreate()中的super.oncreate()调用之前和之后放置Logcat语句,我可以看到super.onCreate()的某些部分将ArrayList中的先前正确值更改为null。

如果它很重要,这个静态ArrayList包含自定义(可序列化)对象,每个对象都包含一个自定义(可序列化)对象的ArrayList,其值本身为null。

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

static ArrayList<CustomObject>

CustomObject{ 
      ArrayList<OtherCustomObject> //values of this ArrayList become null
}

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

2 个答案:

答案 0 :(得分:2)

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

如果数据很重要,请将其写入文件(您说它已经是Serializable)并在启动主要活动时读取它。

答案 1 :(得分:1)

静态数据一直持续到

  1. VM关闭,
  2. 流程终止,或
  3. 该课程已卸下。
  4. 在您描述的情况下,这些都不会发生。 VM已启动,进程正在运行,Dalvik不会卸载类。请提供其他信息以重新解决问题。