Fixing issue where defered unbind was running after synchronous bind. (Bug 6858398, Bug 6863181)

Change-Id: I03dc3ae18528901cc88c79638a8495c1ab8d61af
This commit is contained in:
Adam Cohen
2012-07-23 14:29:15 -07:00
parent 36e6c5bb23
commit a13a2f2a7b
2 changed files with 17 additions and 0 deletions

View File

@@ -98,6 +98,18 @@ public class DeferredHandler {
}
}
/** Runs all queued Runnables from the calling thread. */
public void flush() {
LinkedList<Runnable> queue = new LinkedList<Runnable>();
synchronized (mQueue) {
queue.addAll(mQueue);
mQueue.clear();
}
for (Runnable r : queue) {
r.run();
}
}
void scheduleNextLocked() {
if (mQueue.size() > 0) {
Runnable peek = mQueue.getFirst();

View File

@@ -918,6 +918,11 @@ public class LauncherModel extends BroadcastReceiver {
// data structures, we can't allow any other thread to touch that data, but because
// this call is synchronous, we can get away with not locking).
// The LauncherModel is static in the LauncherApplication and mHandler may have queued
// operations from the previous activity. We need to ensure that all queued operations
// are executed before any synchronous binding work is done.
mHandler.flush();
// Divide the set of loaded items into those that we are binding synchronously, and
// everything else that is to be bound normally (asynchronously).
bindWorkspace(synchronousBindPage);