因此,我对 android 中的内存泄漏进行了大量研究,并阅读了许多 StackOverflow 帖子。我仍然不明白的是,根据 Medium 和 StackOverflow 帖子(下面提到的链接),如果我将活动的上下文传递给 Recyclerview 的适配器并将其作为全局变量存储在适配器中,我的活动与适配器是仍然有资格进行垃圾收集。这是因为没有 GC 根引用适配器或我的活动(一旦它被销毁),因此两者都将被垃圾收集(Example1). 但是,为什么内部类不适用相同的情况?我知道他们持有对其持有类的隐式引用,但是如果活动(在这种情况下为持有类)被破坏并且即使内部类仍在执行一些异步任务,不应该没有指向任何GC 根他们?(控股或内部阶级)所以他们都应该得到垃圾收集?(例 2)。
示例 1:(在活动被破坏后有资格获得 GC):
public class MyAdaptor extends RecyclerView.Adaptor<>{
public Context context;
public MyAdaptor(Context context){
this.context=context;
}
}
public MyActivity extends AppCompatActivity {
private MyAdaptor myAdaptor;
@Override
protected void onCreate(Bundle savedInstanceState) {
//some code
myAdaptor=new MyAdaptor(this);
}
}
示例 2:(活动被销毁后不符合 GC 条件):
public MyHoldingActivity extends AppCompatActivity {
private MyInnerClass myInnerClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
myInnerClass=new MyInnerClass();
}
class MyInnerClass{
//executing some long Async Task
}
}
我提到的两个帖子的链接如下: https ://medium.com/@oznusem/circular-dependency-in-android-should-i-worry-about-it-814660ac79ec
在 RecyclerView.Adapter 中保留 Context/Activity 实例是否安全?
对不起,如果我没有把我的问题说清楚,这是我在 StackOverflow 上的第一篇文章。