Merge "Fixing ANR when loader task could run while helding the lock object" into ub-launcher3-qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
88faafd4e7
@@ -165,17 +165,6 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
mBgAllAppsList = new AllAppsList(iconCache, appFilter);
|
mBgAllAppsList = new AllAppsList(iconCache, appFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Runs the specified runnable immediately if called from the worker thread, otherwise it is
|
|
||||||
* posted on the worker thread handler. */
|
|
||||||
private static void runOnWorkerThread(Runnable r) {
|
|
||||||
if (sWorkerThread.getThreadId() == Process.myTid()) {
|
|
||||||
r.run();
|
|
||||||
} else {
|
|
||||||
// If we are not on the worker thread, then post to the worker handler
|
|
||||||
sWorker.post(r);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPackageState(PackageInstallInfo installInfo) {
|
public void setPackageState(PackageInstallInfo installInfo) {
|
||||||
enqueueModelUpdateTask(new PackageInstallStateChangedTask(installInfo));
|
enqueueModelUpdateTask(new PackageInstallStateChangedTask(installInfo));
|
||||||
}
|
}
|
||||||
@@ -400,7 +389,10 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
stopLoader();
|
stopLoader();
|
||||||
mLoaderTask = new LoaderTask(mApp, mBgAllAppsList, sBgDataModel, results);
|
mLoaderTask = new LoaderTask(mApp, mBgAllAppsList, sBgDataModel, results);
|
||||||
runOnWorkerThread(mLoaderTask);
|
|
||||||
|
// Always post the loader task, instead of running directly (even on same thread) so
|
||||||
|
// that we exit any nested synchronized blocks
|
||||||
|
sWorker.post(mLoaderTask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -505,7 +497,13 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
|
|
||||||
public void enqueueModelUpdateTask(ModelUpdateTask task) {
|
public void enqueueModelUpdateTask(ModelUpdateTask task) {
|
||||||
task.init(mApp, this, sBgDataModel, mBgAllAppsList, mUiExecutor);
|
task.init(mApp, this, sBgDataModel, mBgAllAppsList, mUiExecutor);
|
||||||
runOnWorkerThread(task);
|
|
||||||
|
if (sWorkerThread.getThreadId() == Process.myTid()) {
|
||||||
|
task.run();
|
||||||
|
} else {
|
||||||
|
// If we are not on the worker thread, then post to the worker handler
|
||||||
|
sWorker.post(task);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user