diff options
author | Irfan Sheriff <isheriff@google.com> | 2012-11-07 16:46:31 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-11-07 16:46:31 -0800 |
commit | 5c8e5585e254f9d24320ece18e850140b29236ac (patch) | |
tree | e8968eb0a3629ad5d0b87f56a9a6000f0008e0f6 /wifi | |
parent | 61026ab15d03c309f2741f1eff708611e1407fd6 (diff) | |
parent | 1f6cf5fade6021c1ce788541ec4a60ee36d20651 (diff) | |
download | frameworks_base-5c8e5585e254f9d24320ece18e850140b29236ac.zip frameworks_base-5c8e5585e254f9d24320ece18e850140b29236ac.tar.gz frameworks_base-5c8e5585e254f9d24320ece18e850140b29236ac.tar.bz2 |
am 1f6cf5fa: Merge "Re-use existing thread" into jb-mr1.1-dev
* commit '1f6cf5fade6021c1ce788541ec4a60ee36d20651':
Re-use existing thread
Diffstat (limited to 'wifi')
-rw-r--r-- | wifi/java/android/net/wifi/WifiManager.java | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index b871cdc..0e29882 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -508,6 +508,10 @@ public class WifiManager { private Messenger mWifiServiceMessenger; private final CountDownLatch mConnected = new CountDownLatch(1); + private static Object sThreadRefLock = new Object(); + private static int sThreadRefCount; + private static HandlerThread sHandlerThread; + /** * Create a new WifiManager instance. * Applications will almost always want to use @@ -1365,9 +1369,14 @@ public class WifiManager { return; } - HandlerThread t = new HandlerThread("WifiManager"); - t.start(); - mHandler = new ServiceHandler(t.getLooper()); + synchronized (sThreadRefLock) { + if (++sThreadRefCount == 1) { + sHandlerThread = new HandlerThread("WifiManager"); + sHandlerThread.start(); + } + } + + mHandler = new ServiceHandler(sHandlerThread.getLooper()); mAsyncChannel.connect(mContext, mHandler, mWifiServiceMessenger); try { mConnected.await(); @@ -1983,8 +1992,10 @@ public class WifiManager { protected void finalize() throws Throwable { try { - if (mHandler != null && mHandler.getLooper() != null) { - mHandler.getLooper().quit(); + synchronized (sThreadRefLock) { + if (--sThreadRefCount == 0 && sHandlerThread != null) { + sHandlerThread.getLooper().quit(); + } } } finally { super.finalize(); |