Fix last bit of WidgetTray jank issue

b/21133230

Change-Id: Ic198b8d21be1b0f3465cd4efc30a240e3ec4304a
This commit is contained in:
Hyunyoung Song
2015-06-16 10:45:24 -07:00
parent 0fc56db04f
commit e98f4a4d6d

View File

@@ -55,6 +55,8 @@ public class WidgetPreviewLoader {
/**
* Weak reference objects, do not prevent their referents from being made finalizable,
* finalized, and then reclaimed.
* Note: synchronized block used for this variable is expensive and the block should always
* be posted to a background thread.
*/
@Thunk Set<Bitmap> mUnusedBitmaps =
Collections.newSetFromMap(new WeakHashMap<Bitmap, Boolean>());
@@ -554,10 +556,15 @@ public class WidgetPreviewLoader {
// in the tasks's onCancelled() call, and if cancelled while the task is writing to
// disk, it will be cancelled in the task's onPostExecute() call.
if (mTask.mBitmapToRecycle != null) {
synchronized (mUnusedBitmaps) {
mUnusedBitmaps.add(mTask.mBitmapToRecycle);
}
mTask.mBitmapToRecycle = null;
mWorkerHandler.post(new Runnable() {
@Override
public void run() {
synchronized (mUnusedBitmaps) {
mUnusedBitmaps.add(mTask.mBitmapToRecycle);
}
mTask.mBitmapToRecycle = null;
}
});
}
}
}
@@ -660,14 +667,19 @@ public class WidgetPreviewLoader {
}
@Override
protected void onCancelled(Bitmap preview) {
protected void onCancelled(final Bitmap preview) {
// If we've cancelled while the task is running, then can return the bitmap to the
// recycled set immediately. Otherwise, it will be recycled after the preview is written
// to disk.
if (preview != null) {
synchronized (mUnusedBitmaps) {
mUnusedBitmaps.add(preview);
}
mWorkerHandler.post(new Runnable() {
@Override
public void run() {
synchronized (mUnusedBitmaps) {
mUnusedBitmaps.add(preview);
}
}
});
}
}
}