summaryrefslogtreecommitdiff
path: root/core/java/android/app/LoaderManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/app/LoaderManager.java')
-rw-r--r--core/java/android/app/LoaderManager.java33
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);