2013-03-25 28 views
1

在Android活动中,我正在填充在该活动中声明为静态的ArrayList。 该数据结构将在后面通过其他活动应用程序执行期间如下访问:Android活动上的Static ArrayList

ClassName.data_structure_name;

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

回答

1

是,安卓可以作为解释here处置您Activity的。

如果活动暂停或停止,系统可以通过询问它完成(调用finish()方法)从 存储器拖放,或简单地 杀死它的进程。当活动被再次打开( 被完成或被杀之后),就必须遍布

这是Activity实例创建。如果你的ArrayList是静态的,那么除非从Dalvik虚拟机卸载Activity类(我个人从未见过发生过),否则它不会被丢弃。

无论如何,恕我直言,这不是一个好的设计(我过去曾经使用它)。我建议你使用一个单独的类来存储你的静态ArrayList。只是要小心多线程和the consof using Singletons

Thisthis SO问题也值得一读。

0

数据不会持续存在于不同的进程中,如果这就是你想知道的,那么你可能会得到错误。 IE中,类的静态成员不是持久性存储。

但是,如果这些后来的活动是在同一个进程中,那么你就可以像您指定访问它。

+0

我不认为这是在这里问的问题。 – m0skit0 2013-03-25 00:18:20

1

如果需要通过不同的活动来访问你的ArrayList,我想你应该把它放在一个单独的类 - 不是一个活动。

0

几个问题与这种设计。软件工程和面向对象的

  1. 打破规则
  2. 您还打破MVC设计模式的规则
  3. 在不需要您的活动会占用内存

我猜你从获取数据一些源并将其放入数组列表中。如果您不需要整个数组列表,只需将该值作为一个包中的值传递即可。

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

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

public static final String TAG="MY_TAG"; 

即使Singleton也有很大的争议。

+0

我需要整个阵列。您是否打算向Web服务器发出新请求并重新安装阵列?更多的数据流量,更多的用户等待时间..似乎不是一个好主意,对吧? – notGeek 2013-03-25 01:31:30

+0

如果您是从网络源获取它,然后在内部使用持久性存储缓存一段时间。每次读取数据与存储时间比较。如果太旧,则再次从Web服务器获取数据并更新时间和数据。你假设使用非UI线程来进行网络操作。确保每次向Web服务器发出请求时,旧请求都没有挂起。例如,如果您的请求在每次用户旋转屏幕时创建,您将最终提出新请求。 – minhaz 2013-03-25 01:43:59

+0

*“当你的活动不需要时它会占用内存”* - false,这是一个**静态**成员。你忘了'TAG'声明中的'final') – m0skit0 2013-03-25 02:25:43