2016-08-01 9 views
1

In meiner IM-Anwendung gibt es ein Chats-Fenster, in dem loader.onContentChanged aufgerufen wird, wenn eine Nachricht gesendet oder empfangen wird. Es funktioniert einwandfrei, aber manchmal zufällig sogar nach dem Aufruf von 'loader.onContentChanged' gibt es keine Aufrufe von onCreateLoader und onLoadFinished. Dies ist sehr zufällig, aber die Benutzer erhalten ein seltsames Verhalten, bei dem sie auf Senden klicken und die Nachricht verschwindet. Protokolle zeigen an, dass initLoader aufgerufen wird, aber Protokolle von onCreateLoader fehlen. Ich verwende die Recycler-Ansicht, um die Liste der Nachrichten anzuzeigen, aber dieser Code ist kein Problem.OnCreateLoader nicht zufällig aufgerufen

Antwort

0

Ich weiß nicht den Grund, aber das ist, wie der Defekt festgelegt wurde:

Alter Code:

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(); 
      } 
     } 
    } 
}