Android OnCreateLoader不是随机调用的

Android OnCreateLoader不是随机调用的,android,android-loadermanager,android-loader,Android,Android Loadermanager,Android Loader,在我的IM应用程序中,有一个聊天窗口,每当发送或接收消息时,都会调用loader.onContentChanged。 它工作得非常好,但有时甚至在调用“loader.onContentChanged”之后也会随机调用,没有对onCreateLoader和onLoadFinished的调用。 这是非常随机的,但用户会有一种奇怪的行为,他们点击发送,消息就会消失。 日志表明调用了initLoader,但缺少onCreateLoader中的日志。 我正在使用recycler视图显示邮件列表,但该代码不

在我的IM应用程序中,有一个聊天窗口,每当发送或接收消息时,都会调用loader.onContentChanged。 它工作得非常好,但有时甚至在调用“loader.onContentChanged”之后也会随机调用,没有对onCreateLoader和onLoadFinished的调用。 这是非常随机的,但用户会有一种奇怪的行为,他们点击发送,消息就会消失。 日志表明调用了initLoader,但缺少onCreateLoader中的日志。
我正在使用recycler视图显示邮件列表,但该代码不是问题。

我不知道原因,但这就是修复缺陷的方法:

旧代码:

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();
            }
        }
    }
}
private void initLoader(){
LoaderManager.LoaderCallbacks回调=此;
LoaderManager lm=getSupportLoaderManager();
if(mLoader==null){
mLoader=lm.initLoader(LOADER\u ID,null,回调);
}否则{
mLoader.onContentChanged();
}
}`
新代码:
`私有void initLoader(){
LoaderManager.LoaderCallbacks回调=此;
LoaderManager lm=getSupportLoaderManager();
if(mLoader==null){
mLoader=lm.initLoader(LOADER\u ID,null,回调);
}否则{
if(mLoader.isStarted()){
mLoader.onContentChanged();
}否则{
试一试{
mLoader=lm.restartLoader(LOADER\u ID,null,回调);
}捕获(例外e){
mLoader=null;
initLoader();
}
}
}
}

我不知道原因,但这就是修复缺陷的方法:

旧代码:

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();
            }
        }
    }
}
private void initLoader(){
LoaderManager.LoaderCallbacks回调=此;
LoaderManager lm=getSupportLoaderManager();
if(mLoader==null){
mLoader=lm.initLoader(LOADER\u ID,null,回调);
}否则{
mLoader.onContentChanged();
}
}`
新代码:
`私有void initLoader(){
LoaderManager.LoaderCallbacks回调=此;
LoaderManager lm=getSupportLoaderManager();
if(mLoader==null){
mLoader=lm.initLoader(LOADER\u ID,null,回调);
}否则{
if(mLoader.isStarted()){
mLoader.onContentChanged();
}否则{
试一试{
mLoader=lm.restartLoader(LOADER\u ID,null,回调);
}捕获(例外e){
mLoader=null;
initLoader();
}
}
}
}