【发布时间】:2019-01-25 21:36:20
【问题描述】:
我试图在onCreate 期间通过 AsyncTask 从Room 数据库加载数据(也在onStart 期间尝试过)。问题是,我通过WeakReference 将上下文传递给AsyncTask,有时(四分之一)上下文在onPostExecute 上变为空,即使任务几乎立即完成(这是一个小型数据库)。
我不知道哪种方法是通过 AsyncTask 在 onCreate 方法上加载数据的正确方法,而不会冒着上下文很快变为 null 的风险 - 我知道必须通过 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() { ... }); 时匿名实现
谢谢
【问题讨论】:
标签: android android-asynctask android-room weak-references oncreate