android - 在 onCreate() 期间通过 AsyncTask 加载数据
问题描述
我正在尝试通过 AsyncTask 从数据库加载数据onCreate
(期间也尝试过)。问题是,我将上下文传递给via a ,有时(四分之一)上下文在 上变为 null ,即使任务几乎立即完成(它是一个小型数据库)。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() { ... });
谢谢
解决方案
推荐阅读
- c# - 使用错误处理处理多个 http 请求异步的正确方法
- sql - SQL左连接与右表上的子句
- python - 如何找到连续体并删除它?
- objective-c - 如果字典元素为空,如何过滤字典数组?
- swift - 如何在具有 NSError 对象的结构中确认 Codable 协议?
- php - Laravel Nova where 子句中的列不明确/where 子句中的未知列
- c++ - 如何避免在 c++11 中触发这种复制构造函数?
- iot - gen/kaa_remote_control_ecf.h:没有这样的文件或目录
- angular - 使用 Angular,如何在点击时动态添加组件?(不止一个)
- java - 使用 ole 控制站点在 java 32->64Bit 后崩溃。EventHandler 不再正常工作