我正在尝试通过onCreate
数据库中的AsyncTask在onStart
期间加载数据(也在Room
期间尝试加载数据)。问题是,我通过AsyncTask
将上下文传递到WeakReference
,有时(四分之一)上下文在onPostExecute
上变为空,即使任务几乎立即完成(这是一个小型数据库)。
我不知道哪种正确的方法可以通过AsyncTask
上的onCreate
加载数据,而又不会冒上下文如此快速地变为空的风险-我知道必须通过WeakReference完成为了避免内存泄漏,但我认为有时会由于某种原因而重新创建活动,以至于任务无法将结果发布到原始上下文中,并且数据也不会显示在Activity
中。>
考虑到任务几乎立即完成的事实,有什么想法可以解决该问题,但是Room
库要求通过另一个线程来完成此任务(这也提高了性能和响应能力)?
因此,为了清楚起见,我试图以这种方式访问上下文:
public MyTask(ActivityListener listener) {
mWeakContext = new WeakReference(listener);
}
protected void onPostExecute(Boolean result) {
AcitivtyListener aListener = mWeakContext.get();
if (aListener != null) aListener.refresh(data);
}
ActivityListener
接口是在调用new MyTask(new ActivityListener() { ... });
时匿名实现的
谢谢