我在这里有一个关于表现的一般性问题,我应该做哪些以及哪些不应该使用。 我实际上在我的App中使用了两个活动,让我们称之为“第一个”和“第二个”活动。
在第一个活动中,我有一个公共静态对象,在我的例子中,它是一个由我创建的自定义对象的列表,称为Conjunction。
当我调用theSecond活动时,我想获取此列表的内容。 那么我应该使用公共静态变量吗?有什么问题吗?第一项活动只有一个实例吗?那么使用公共静态变量没有问题..?我想。
或者我应该计算整个列表并将信息放在一个大字符串上并使用putExtra方法将其发送到第二个活动?
对此的一个很好的解释是非常好的,我真的很感激它:)
答案 0 :(得分:11)
建议不要使用静态变量。静态变量存储在堆的 PermGen 部分中。即使类完成它,静态变量也会保留在堆中。垃圾收集器会进行标记和扫描。如果第2个活动中引用的第1个活动中有静态变量,则链接会保持很长时间。如果使用更多静态变量,可能会出现内存泄漏。还减少了不必要的对象的使用。
静态变量由ClassLoaders引用的Class对象引用 - 除非ClassLoader以某种方式删除Class或ClassLoader本身符合垃圾回收条件,否则静态变量不会被垃圾回收。因此,如果您使用在许多类中引用的静态变量,那么这些类和声明静态变量的类不能被垃圾收集,除非这些类可用于垃圾收集。因此,这会导致堆内存扩展,从而导致内存泄漏。
我建议使用puExtra作为基元类型。在你使用单身人士的情况下应该有帮助。
在这段视频中,该人讨论了为什么不应该使用静态变量以及如何避免内存泄漏。http://www.youtube.com/watch?v=_CruQY55HOk。这家伙谈到使用MAT Analyzer来检查内存泄漏。
另请看这个链接。 http://developer.android.com/guide/faq/framework.html 。看一下标题下的详细信息*如何在单个应用程序中的活动/服务之间传递数据?
答案 1 :(得分:1)
public static不是一个好主意。在某些情况下,系统可能会终止“第一个”活动。通过:Activity Lifecycle可以帮助您了解活动的运作方式。
最好不要将putExtra真正用作字符串,而是将putExtra用于Parselable或Serializable对象。 see here for serializable