Don't let old Launcher activity interfere with new one
-> Launcher uses a static instance of it's loader (across multiple activities) since activities can come and go (configuration change, eg.) but the data model and loading is static. -> Currently, this is not robust to a sequence of events that looks like onCreate(instance A), onCreate(instance B), onDestroy(instance B) -- depending on the timing of those calls. -> This CL addresses a symptom of the above scenario by not allowing an older Launcher Activity cancel the loader / clear the callbacks for a newer Activity. Bug 17679693 Change-Id: I8ece93e288464b0d578b9669c165b67132d997ed
This commit is contained in:
parent
6d467e27b7
commit
1a85c5839c
|
@ -1134,7 +1134,9 @@ public class Launcher extends Activity
|
|||
@Override
|
||||
public Object onRetainNonConfigurationInstance() {
|
||||
// Flag the loader to stop early before switching
|
||||
mModel.stopLoader();
|
||||
if (mModel.isCurrentCallbacks(this)) {
|
||||
mModel.stopLoader();
|
||||
}
|
||||
if (mAppsCustomizeContent != null) {
|
||||
mAppsCustomizeContent.surrender();
|
||||
}
|
||||
|
@ -1997,8 +1999,13 @@ public class Launcher extends Activity
|
|||
|
||||
// Stop callbacks from LauncherModel
|
||||
LauncherAppState app = (LauncherAppState.getInstance());
|
||||
mModel.stopLoader();
|
||||
app.setLauncher(null);
|
||||
|
||||
// It's possible to receive onDestroy after a new Launcher activity has
|
||||
// been created. In this case, don't interfere with the new Launcher.
|
||||
if (mModel.isCurrentCallbacks(this)) {
|
||||
mModel.stopLoader();
|
||||
app.setLauncher(null);
|
||||
}
|
||||
|
||||
try {
|
||||
mAppWidgetHost.stopListening();
|
||||
|
|
|
@ -1385,6 +1385,10 @@ public class LauncherModel extends BroadcastReceiver
|
|||
return isLaunching;
|
||||
}
|
||||
|
||||
public boolean isCurrentCallbacks(Callbacks callbacks) {
|
||||
return (mCallbacks != null && mCallbacks.get() == callbacks);
|
||||
}
|
||||
|
||||
public void startLoader(boolean isLaunching, int synchronousBindPage) {
|
||||
startLoader(isLaunching, synchronousBindPage, LOADER_FLAG_NONE);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue