1

在一个 Android 活动中,我正在填充一个在该活动中声明为静态的 ArrayList。此数据结构稍后在应用程序执行期间由其他活动访问,如下所示:

类名.data_structure_name;

我的问题是这样做是否安全,或者Android是否可以清除内存结构或类似的东西?

4

4 回答 4

1

是的,Android 可以按照此处Activity的说明处理您的。

如果一个活动被暂停或停止,系统可以通过要求它完成(调用它的 finish() 方法)或简单地终止它的进程来将它从内存中删除。Activity 再次打开时(完成或杀死后),必须全部创建

但这Activity 举例。如果您是静态的,那么除非从 Dalvik VM 卸载该类(我个人从未见过这种情况),ArrayList否则它不会被删除。Activity

无论如何,恕我直言,这不是一个好的设计(我过去曾使用过)。我建议你使用一个单独的类来存储你的 static ArrayList。请注意多线程 使用Singletons.

这个这个SO 问题也值得一读。

于 2013-03-25T00:22:15.540 回答
1

如果您需要不同的活动访问您的 ArrayList,我认为您应该将它放在一个单独的类中 - 而不是 Activity 类。

于 2013-03-25T00:23:09.957 回答
0

如果您想知道,数据不会在不同的进程中持续存在,因此您可能只会遇到错误。IE,类的静态成员不是持久存储。

但是,如果您以后的这些活动都在同一个流程中,那么您将能够像您指定的那样访问它。

于 2013-03-25T00:16:02.910 回答
0

这个设计有几个问题。

  1. 打破软件工程和 OOP 的规则
  2. 您还违反了 MVC 设计模式的规则
  3. 当不需要您的活动时,它将占用内存

我猜你从某个来源获取数据并将其放入数组列表中。如果您不需要整个数组列表,只需将值作为包内传递。

如果您在后续活动中需要整个数组列表,请按照您最初获得的方式重新填充数组列表。

静态访问不适合 OOP 设计。除了以下打印日志标签的情况外,我不会在我的 Android 应用程序的任何地方使用静态。

public static final String TAG="MY_TAG";

即使是辛格尔顿也值得商榷。

于 2013-03-25T01:21:26.690 回答