繁体   English   中英

super.onCreate()改变我的变量

[英]super.onCreate() changes my variables

我最近开始使用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
}

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

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

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

静态数据一直存在

  1. VM关闭,
  2. 该过程终止,或
  3. 该类已卸载。

在您描述的情况下,这些都不会发生。 VM已启动,进程正在运行,Dalvik不会卸载类。 请提供其他信息以重现问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM