【问题标题】:OnCreateLoader not called randomlyOnCreateLoader 不是随机调用的
【发布时间】:2016-08-01 14:34:11
【问题描述】:
在我的 IM 应用程序中有一个聊天窗口,每当发送或接收消息时都会调用 loader.onContentChanged。
它工作得非常好,但有时即使在调用 'loader.onContentChanged' 之后也会随机调用 onCreateLoader 和 onLoadFinished。
这是非常随机的,但用户会得到一个奇怪的行为,他们点击发送并且消息消失。
日志表明调用了 initLoader 但缺少来自 onCreateLoader 的日志。
我正在使用回收器视图来显示消息列表,但该代码不是问题。
【问题讨论】:
标签:
android
android-loadermanager
android-loader
【解决方案1】:
我不知道原因,但这就是修复缺陷的方法:
旧代码:
private void initLoader(){
LoaderManager.LoaderCallbacks<Cursor> callbacks = this;
LoaderManager lm = getSupportLoaderManager();
if (mLoader == null) {
mLoader = lm.initLoader(LOADER_ID, null, callbacks);
} else {
mLoader.onContentChanged();
}
}`
New code:
`private void initLoader() {
LoaderManager.LoaderCallbacks<Cursor> callbacks = this;
LoaderManager lm = getSupportLoaderManager();
if (mLoader == null) {
mLoader = lm.initLoader(LOADER_ID, null, callbacks);
} else {
if(mLoader.isStarted()) {
mLoader.onContentChanged();
}else {
try {
mLoader = lm.restartLoader(LOADER_ID, null, callbacks);
}catch( Exception e ){
mLoader = null;
initLoader();
}
}
}
}