diff options
Diffstat (limited to 'core/java/android/app/LoaderManager.java')
| -rw-r--r-- | core/java/android/app/LoaderManager.java | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/core/java/android/app/LoaderManager.java b/core/java/android/app/LoaderManager.java index 164141cff7a0..46a008d58e9d 100644 --- a/core/java/android/app/LoaderManager.java +++ b/core/java/android/app/LoaderManager.java @@ -223,6 +223,7 @@ class LoaderManagerImpl extends LoaderManager { boolean mStarted; boolean mRetaining; boolean mRetainingStarted; + boolean mReportNextStart; boolean mDestroyed; boolean mListenerRegistered; @@ -291,7 +292,7 @@ class LoaderManagerImpl extends LoaderManager { } } - if (mStarted && mHaveData) { + if (mStarted && mHaveData && !mReportNextStart) { // This loader has retained its data, either completely across // a configuration change or just whatever the last data set // was after being restarted from a stop, and now at the point of @@ -302,6 +303,17 @@ class LoaderManagerImpl extends LoaderManager { } } + void reportStart() { + if (mStarted) { + if (mReportNextStart) { + mReportNextStart = false; + if (mHaveData) { + callOnLoadFinished(mLoader, mData); + } + } + } + } + void stop() { if (DEBUG) Log.v(TAG, " Stopping: " + this); mStarted = false; @@ -449,10 +461,11 @@ class LoaderManagerImpl extends LoaderManager { writer.print(prefix); writer.print("mData="); writer.println(mData); } writer.print(prefix); writer.print("mStarted="); writer.print(mStarted); - writer.print(" mRetaining="); writer.print(mRetaining); + writer.print(" mReportNextStart="); writer.print(mReportNextStart); writer.print(" mDestroyed="); writer.println(mDestroyed); - writer.print(prefix); writer.print("mListenerRegistered="); - writer.println(mListenerRegistered); + writer.print(prefix); writer.print("mRetaining="); writer.print(mRetaining); + writer.print(" mRetainingStarted="); writer.print(mRetainingStarted); + writer.print(" mListenerRegistered="); writer.println(mListenerRegistered); if (mPendingLoader != null) { writer.print(prefix); writer.println("Pending Loader "); writer.print(mPendingLoader); writer.println(":"); @@ -740,6 +753,18 @@ class LoaderManagerImpl extends LoaderManager { } } + void doReportNextStart() { + for (int i = mLoaders.size()-1; i >= 0; i--) { + mLoaders.valueAt(i).mReportNextStart = true; + } + } + + void doReportStart() { + for (int i = mLoaders.size()-1; i >= 0; i--) { + mLoaders.valueAt(i).reportStart(); + } + } + void doDestroy() { if (!mRetaining) { if (DEBUG) Log.v(TAG, "Destroying Active in " + this); |
