summaryrefslogtreecommitdiffstats
path: root/core/java/android/util
diff options
context:
space:
mode:
authorPatrick Dubroy <dubroy@google.com>2010-12-20 17:15:31 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-12-20 17:15:31 -0800
commit96abab264e4d96071dc169b4828e950c1ae59681 (patch)
tree5b05866f2a8e5224f720f5b0e934173c88f6ee11 /core/java/android/util
parent4cfcca91ef717d54feefc7748cb9de15e1fd257c (diff)
parentf890fab5a6715548e520a6f010a3bfe7607ce56e (diff)
downloadframeworks_base-96abab264e4d96071dc169b4828e950c1ae59681.zip
frameworks_base-96abab264e4d96071dc169b4828e950c1ae59681.tar.gz
frameworks_base-96abab264e4d96071dc169b4828e950c1ae59681.tar.bz2
Merge "Ensure bitmaps aren't freed while referenced from a display list"
Diffstat (limited to 'core/java/android/util')
-rw-r--r--core/java/android/util/Finalizers.java127
1 files changed, 0 insertions, 127 deletions
diff --git a/core/java/android/util/Finalizers.java b/core/java/android/util/Finalizers.java
deleted file mode 100644
index 671f2d4..0000000
--- a/core/java/android/util/Finalizers.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.util;
-
-import java.lang.ref.PhantomReference;
-import java.lang.ref.Reference;
-import java.lang.ref.ReferenceQueue;
-
-/**
- * This class can be used to implement reliable finalizers.
- *
- * @hide
- */
-public final class Finalizers {
- private static final String LOG_TAG = "Finalizers";
-
- private static final Object[] sLock = new Object[0];
- private static boolean sInit;
- private static Reclaimer sReclaimer;
-
- /**
- * Subclass of PhantomReference used to reclaim resources.
- */
- public static abstract class ReclaimableReference<T> extends PhantomReference<T> {
- public ReclaimableReference(T r, ReferenceQueue<Object> q) {
- super(r, q);
- }
-
- public abstract void reclaim();
- }
-
- /**
- * Returns the queue used to reclaim ReclaimableReferences.
- *
- * @return A reference queue or null before initialization
- */
- public static ReferenceQueue<Object> getQueue() {
- synchronized (sLock) {
- if (!sInit) {
- return null;
- }
- if (!sReclaimer.isRunning()) {
- sReclaimer = new Reclaimer(sReclaimer.mQueue);
- sReclaimer.start();
- }
- return sReclaimer.mQueue;
- }
- }
-
- /**
- * Invoked by Zygote. Don't touch!
- */
- public static void init() {
- synchronized (sLock) {
- if (!sInit && sReclaimer == null) {
- sReclaimer = new Reclaimer();
- sReclaimer.start();
- sInit = true;
- }
- }
- }
-
- private static class Reclaimer extends Thread {
- ReferenceQueue<Object> mQueue;
-
- private volatile boolean mRunning = false;
-
- Reclaimer() {
- this(new ReferenceQueue<Object>());
- }
-
- Reclaimer(ReferenceQueue<Object> queue) {
- super("Reclaimer");
- setDaemon(true);
- mQueue = queue;
- }
-
- @Override
- public void start() {
- mRunning = true;
- super.start();
- }
-
- boolean isRunning() {
- return mRunning;
- }
-
- @SuppressWarnings({"InfiniteLoopStatement"})
- @Override
- public void run() {
- try {
- while (true) {
- try {
- cleanUp(mQueue.remove());
- } catch (InterruptedException e) {
- // Ignore
- }
- }
- } catch (Exception e) {
- Log.e(LOG_TAG, "Reclaimer thread exiting: ", e);
- } finally {
- mRunning = false;
- }
- }
-
- private void cleanUp(Reference<?> reference) {
- do {
- reference.clear();
- ((ReclaimableReference<?>) reference).reclaim();
- } while ((reference = mQueue.poll()) != null);
- }
- }
-}