我是Android的初学者,但我似乎遇到了一个问题,我的活动永远不会被垃圾收集,因为在我的线程的非静态内部类中仍然有一个对Activity的引用,该变量被调用这个$ 0我通过在Eclipse中使用MAT找到它。以下是我目前的设置。
public class MyActivity
-->class MySurfaceView
---->class MyThread
在尝试查找有关是否可以删除最后一个实例的信息时,看来我找不到非常有用的文章here后无法找到。
如果您不控制,请避免活动中的非静态内部类 他们的生命周期,使用静态内部类并做出弱引用 到里面的活动。这个问题的解决方案是使用静态 内部类与外部类的WeakReference,如在中所做的那样 例如ViewRoot及其W内部类
所以看起来我不应该使用这个内部类系统或使用WeakReferences。
我的问题是,为什么示例项目使用没有WeakReferences的内部类系统?他们还在收集野蛮人吗?或者他们的设计是不是为了处理垃圾收集?
我的应用程序是否可能存在代码问题,这意味着我应该更正我的代码并仍然保留我的内部类?或者我应该分开课程(或介绍WeakReferences)?
答案 0 :(得分:1)
您可以使用内部类使它们成为静态,并使用弱引用父类。 还在应用程序上下文中存储长生命对象。