Merge "Fix a bug where restartLoader would result in a stuck loader" into nyc-dev

This commit is contained in:
TreeHugger Robot
2016-04-27 19:12:50 +00:00
committed by Android (Google) Code Review

View File

@@ -339,13 +339,16 @@ class LoaderManagerImpl extends LoaderManager {
}
}
void cancel() {
boolean cancel() {
if (DEBUG) Log.v(TAG, " Canceling: " + this);
if (mStarted && mLoader != null && mListenerRegistered) {
if (!mLoader.cancelLoad()) {
final boolean cancelLoadResult = mLoader.cancelLoad();
if (!cancelLoadResult) {
onLoadCanceled(mLoader);
}
return cancelLoadResult;
}
return false;
}
void destroy() {
@@ -667,20 +670,21 @@ class LoaderManagerImpl extends LoaderManager {
mInactiveLoaders.put(id, info);
} else {
// We already have an inactive loader for this ID that we are
// waiting for! What to do, what to do...
if (!info.mStarted) {
// The current Loader has not been started... we thus
// have no reason to keep it around, so bam, slam,
// thank-you-ma'am.
// waiting for! Try to cancel; if this returns true then the task is still
// running and we have more work to do.
if (!info.cancel()) {
// The current Loader has not been started or was successfully canceled,
// we thus have no reason to keep it around. Remove it and a new
// LoaderInfo will be created below.
if (DEBUG) Log.v(TAG, " Current loader is stopped; replacing");
mLoaders.put(id, null);
info.destroy();
} else {
// Now we have three active loaders... we'll queue
// up this request to be processed once one of the other loaders
// finishes or is canceled.
if (DEBUG) Log.v(TAG, " Current loader is running; attempting to cancel");
info.cancel();
// finishes.
if (DEBUG) Log.v(TAG,
" Current loader is running; configuring pending loader");
if (info.mPendingLoader != null) {
if (DEBUG) Log.v(TAG, " Removing pending loader: " + info.mPendingLoader);
info.mPendingLoader.destroy();