8

我在这里有一个关于性能的一般性问题,我应该做哪些,不应该使用哪些。我实际上在我的应用程序中使用了两个活动,让我们称之为“theFirst”和“theSecond”活动。

在第一个活动中,我有一个公共静态对象,在我的例子中,它是我制作的自定义对象的列表,称为 Conjunction。

当我调用 theSecond 活动时,我想获取此列表的内容。那么我应该使用公共静态变量吗?有什么问题吗?theFirst 活动只有一个实例,对吗?所以使用公共静态变量没问题..?我猜。

或者我应该计算整个列表并将信息放在一个大字符串上并使用 putExtra 方法将其发送到第二个活动?

对此的一个很好的解释会非常好,我将非常感激:)

4

2 回答 2

12

不推荐使用静态变量。静态变量存储在堆的PermGen部分中。即使类完成了它的工作,静态变量也会留在堆中。垃圾收集器会做标记和清扫。如果您在第二个活动中引用的第一个活动中有一个静态变量,则链接将保持很长时间。如果您使用更多静态变量,您可能会出现内存泄漏。也减少使用不必要的物品。

静态变量由 ClassLoader 引用的 Class 对象引用 - 因此,除非 ClassLoader 以某种方式删除 Class 或 ClassLoader 本身符合垃圾收集条件,否则静态变量不会被垃圾收集。因此,如果您使用在许多类中引用的静态变量,除非这些类可用于垃圾收集,否则这些类和声明静态变量的类不能被垃圾收集。所以这会导致堆内存扩展导致内存泄漏。

我建议将 puExtra 用于基元类型。在您的情况下,使用单例应该会有所帮助。

在这个视频中,这个人谈到了为什么不应该使用静态变量以及如何避免内存泄漏。http://www.youtube.com/watch?v=_CruQY55HOk。这家伙谈到使用 MAT Analyzer 来检查内存泄漏。

也看看这个链接。http://developer.android.com/guide/faq/framework.html。查看标题下的详细信息 *如何在单个应用程序中的活动/服务之间传递数据?。

于 2013-03-10T13:10:59.980 回答
1

公共静态不是一个好主意。在某些情况下,“theFirst”活动可能会被系统终止。通关:活动生命周期可以帮助您了解活动的工作方式。

最好不要真正将 putExtra 用作字符串,还要将 putExtra 用于 Parselable 或 Serializable 对象。有关可序列化的信息,请参见此处

于 2013-03-10T13:05:09.260 回答