Java 由于此$0变量,未对Android内部类进行垃圾收集

Java 由于此$0变量,未对Android内部类进行垃圾收集,java,android,garbage-collection,inner-classes,Java,Android,Garbage Collection,Inner Classes,我是Android的初学者,但我似乎遇到了一个问题,我的活动从未被垃圾收集,因为在我的线程的非静态内部类中仍然有一个对活动的引用。变量名为$0。我在Eclipse中使用MAT找到它。下面是我当前的设置 public class MyActivity -->class MySurfaceView ---->class MyThread 当试图查找有关是否可以删除最后一个实例的信息时,在找到一篇非常有用的文章后,似乎无法删除 如果不控制活动,请避免活动中的非静态内部类 它们的生命周期,

我是Android的初学者,但我似乎遇到了一个问题,我的活动从未被垃圾收集,因为在我的线程的非静态内部类中仍然有一个对活动的引用。变量名为$0。我在Eclipse中使用MAT找到它。下面是我当前的设置

public class MyActivity
-->class MySurfaceView
---->class MyThread
当试图查找有关是否可以删除最后一个实例的信息时,在找到一篇非常有用的文章后,似乎无法删除

如果不控制活动,请避免活动中的非静态内部类 它们的生命周期,使用静态的内部类并进行弱引用 到里面的活动。此问题的解决方案是使用静态 与外部类弱引用的内部类,如中所做 例如,ViewRoot及其W内部类

所以我似乎不应该使用这个内部类系统,也不应该使用weakreference

我的问题是,为什么示例项目使用没有weakreference的内部类系统?它们还在收集吗?或者他们不是为了处理垃圾收集而设计的


我的应用程序是否可能存在代码问题,这意味着我应该更正代码,同时保留内部类?或者我应该分离类(或引入weakreference)?

您可以使用内部类使它们成为静态的,并对父类具有弱引用。
还可以在应用程序上下文中存储长期存在的对象。

内部类保存对其外部类的引用。当活动被销毁时,您是否正确地清理了
MyThread
,即中断并确保它死亡?您的问题实际上是关于外部类没有被垃圾收集。*感谢您的回答,为什么示例项目不这样做?