Merge "Fix a bug where restartLoader would result in a stuck loader" into nyc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
596a4a1592
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user