Loader: onLoadFinished sólo se llama una vez

Tengo un cargador que se utiliza en una actividad. Soy capaz de iniciar el cargador y se llama onLoadFinished. Cuando actualizo datos y llamo a onContentChanged en el cargador veo que loadInBackground y deliverResult son llamados. Aquí es donde el sendero parece detenerse. No recibo ninguna devolución de llamada a onLoadFinished .

Si vuelvo a crear la actividad (también conocido como cambio de orientación, o relanzar) entonces se comportará de la misma manera.

Estoy utilizando el cargador de soporte-v4 y el administrador del cargador.

Mi SharedPreferenceLoader basado en el cargador de CommonsWare :

 public class SharedPreferencesLoader extends AsyncTaskLoader<SharedPreferences> implements SharedPreferences.OnSharedPreferenceChangeListener { private SharedPreferences prefs = null; private static final String TAG = SharedPreferencesLoader.class.getSimpleName(); public SharedPreferencesLoader(Context context) { super(context); } @Override public SharedPreferences loadInBackground() { Log.v(TAG, "wol: load in background"); prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); prefs.registerOnSharedPreferenceChangeListener(this); return (prefs); } @Override protected void onStartLoading() { if (prefs != null) { deliverResult(prefs); } if (takeContentChanged() || prefs == null) { forceLoad(); } } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Log.v(TAG, "wol: on shared preference changed."); onContentChanged(); } } 

A continuación se muestra cómo se está utilizando el cargador:

 public class MainActivity extends ActionBarActivity implements LoaderManager.LoaderCallbacks<SharedPreferences> { private static final String TAG = MainActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getSupportLoaderManager().initLoader(0, null, this); // fetch list of locations through an intent service. // This will save data to shared preferences and trigger onContentChanged MyIntentService.startActionGetLocations(this); } @Override public Loader<SharedPreferences> onCreateLoader(int i, Bundle bundle) { return new SharedPreferencesLoader(this); } @Override public void onLoadFinished(final Loader<SharedPreferences> sharedPreferencesLoader, final SharedPreferences sharedPreferences) { final List<PwStructure> locations = SharedPreferencesUtils.getLocations(sharedPreferences, this); Log.v(TAG, "wol: on load finished: "+locations); /* Do something with data. */ } @Override public void onLoaderReset(final Loader<SharedPreferences> sharedPreferencesLoader) { } } 

Actualización He encontrado esto en la fuente LoaderManager . Parece que la llamada a onLoadFinished no se llama si los datos tienen la misma referencia.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.