Loader: onLoadFinished вызывается только один раз

У меня есть один загрузчик, используемый в действии. Я могу запустить загрузчик, и он вызывается onLoadFinished. Когда я обновляю данные и вызываю onContentChanged в загрузчике, я вижу, что loadInBackground и deliverResult . Здесь тропа, кажется, останавливается. Я не получаю никакого обратного вызова onLoadFinished .

Если я воссоздаю активность (иначе изменение ориентации или перезапуск), тогда она будет вести себя одинаково.

Я использую диспетчер загрузчика и загрузчика support-v4.

Мой SharedPreferenceLoader основанный на загрузчике 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(); } } 

Вот как используется загрузчик:

 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) { } } 

Обновление я нашел это в источнике LoaderManager . Похоже, что вызов onLoadFinished не вызывается, если данные имеют одинаковую ссылку.

Solutions Collecting From Web of "Loader: onLoadFinished вызывается только один раз"

Да, похоже, что с текущей реализацией LoaderManager SharedPreferencesLoader довольно сильно прикручен. Я осуждаю это.

Спасибо за указание на это!