我的代码中出现了以下警告:
这个 AsyncTask 类应该是静态的,否则可能会导致内存泄漏(匿名 android.os.AsyncTask) 静态字段将泄漏上下文。非静态内部类对其外部类有隐式引用。如果这个外部类是一个 Fragment 或者 Activity,那么这个引用意味着长时间运行的 handler/loader/task 将持有对该 activity 的引用,从而阻止它被垃圾回收。同样,这些长时间运行的实例中对 activities 和 fragments 的直接字段引用也可能导致内存泄漏。ViewModel 类永远不应该指向 Views 或非应用程序 Contexts。
这是我的代码:
new AsyncTask<Void,Void,Void>(){
@Override
protected Void doInBackground(Void... params) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mAdapter.notifyDataSetChanged();
}
});
return null;
}
}.execute();
我该如何纠正这个问题?
myActivity.getApplication()
的输出传递到单例的私有构造函数中,以初始化RoomDB类和其他类)。我的ViewModels获取单例实例作为私有引用,以对DB执行某些操作。因此,ViewModels导入单例包,以及android.app.Application
,其中一个甚至是android.app.Activity
。由于“单例”不需要导入这些ViewModel才能工作,所以可能会发生内存泄漏吗? - SebasSBM