我的MainActivity类中有以下2行代码传递值:

RecyclerView mRecyclerView = findViewById(R.id.act_recyclerview);
new LoadText(this,mRecyclerView).execute();


在我的LoadText类中,我的消费如下:

private Context mContext;
private RecyclerView mRecyclerView;


public LoadText(Context context, RecyclerView recyclerView){
    this.mContext=context;
    this.mRecyclerView=recyclerView;
}


我的代码工作正常,但是当我将鼠标悬停在mContext和mRecyclerView上时,Android Studio会警告资源泄漏。我一直在寻找解决类似我的问题的解决方案,建议我通过构造函数传递值,这是我在做的,因此我不确定我为什么。

最佳答案

这是一个警告,表示系统知道某些错误,但不能肯定地说100%。

在这种情况下,问题是您的LoadText对象可以使用多长时间。如果它的生存期超过传递给它的ActivityRecyclerView,则您的代码将导致内存泄漏:LoadText对Activity具有很强的引用,这将防止对其进行垃圾回收。

如果您作为人类,知道您的LoadText对象的寿命永远不会比“活动”寿命长(或者只会在很短的时间内如此),那么您可以放心地忽略此警告。另一方面,如果LoadText对象生存时间很长,则有可能使您的活动永远活着。

实际上,泄漏单个活动并不是世界末日。但是,如果您做很多这样的事情,最终您的应用程序将耗尽内存并崩溃。

僵尸活动也有可能结束您不希望执行的代码(也许LoadText类在其上调用了一个方法),这可能导致不良行为或崩溃。

关于java - 通过构造函数将上下文从Main Activity传递到Java类时,获取“此字段会泄漏上下文对象”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56484429/

10-10 18:25