Tweak locking in launcher so mLock isn't held while the slow stuff happens.

Bug 2652948

Change-Id: I9d386395278830ead5deda17b8b09e0dcfeff989
This commit is contained in:
Joe Onorato
2010-05-04 12:12:41 -07:00
parent c15bd51dbf
commit fad1fb5ed4
2 changed files with 19 additions and 14 deletions

View File

@@ -100,24 +100,28 @@ public class IconCache {
}
public Bitmap getIcon(Intent intent) {
final ResolveInfo resolveInfo = mPackageManager.resolveActivity(intent, 0);
ComponentName component = intent.getComponent();
synchronized (mCache) {
final ResolveInfo resolveInfo = mPackageManager.resolveActivity(intent, 0);
ComponentName component = intent.getComponent();
if (resolveInfo == null || component == null) {
return mDefaultIcon;
if (resolveInfo == null || component == null) {
return mDefaultIcon;
}
CacheEntry entry = cacheLocked(component, resolveInfo);
return entry.icon;
}
CacheEntry entry = cacheLocked(component, resolveInfo);
return entry.icon;
}
public Bitmap getIcon(ComponentName component, ResolveInfo resolveInfo) {
if (resolveInfo == null || component == null) {
return null;
}
synchronized (mCache) {
if (resolveInfo == null || component == null) {
return null;
}
CacheEntry entry = cacheLocked(component, resolveInfo);
return entry.icon;
CacheEntry entry = cacheLocked(component, resolveInfo);
return entry.icon;
}
}
private CacheEntry cacheLocked(ComponentName componentName, ResolveInfo info) {

View File

@@ -73,6 +73,7 @@ public class LauncherModel extends BroadcastReceiver {
private boolean mBeforeFirstLoad = true; // only access this from main thread
private WeakReference<Callbacks> mCallbacks;
private final Object mAllAppsListLock = new Object();
private AllAppsList mAllAppsList;
private IconCache mIconCache;
@@ -306,7 +307,7 @@ public class LauncherModel extends BroadcastReceiver {
ArrayList<ApplicationInfo> removed = null;
ArrayList<ApplicationInfo> modified = null;
synchronized (mLock) {
synchronized (mAllAppsListLock) {
if (mBeforeFirstLoad) {
// If we haven't even loaded yet, don't bother, since we'll just pick
// up the changes.
@@ -1047,7 +1048,7 @@ public class LauncherModel extends BroadcastReceiver {
int i=0;
int batchSize = -1;
while (i < N && !mStopped) {
synchronized (mLock) {
synchronized (mAllAppsListLock) {
if (i == 0) {
// This needs to happen inside the same lock block as when we
// prepare the first batch for bindAllApplications. Otherwise