summaryrefslogtreecommitdiff
path: root/services/java/com/android/server/ConnectivityService.java
diff options
context:
space:
mode:
authorWink Saville <wink@google.com>2010-09-02 19:23:52 -0700
committerWink Saville <wink@google.com>2010-09-02 19:23:52 -0700
commitbb08caf54bdb201d9b85393152f1b400eb4abe2b (patch)
treeb42d80ff4cb117a1e8c942129e96e826678386c0 /services/java/com/android/server/ConnectivityService.java
parentdcfd5d784c7d474e0932604a9f0dff591c3210e2 (diff)
Fix and simplify ConnectivityService singleton.
Change-Id: Idb74854db9d801c1cc138eb5ca866cf01940ff6d
Diffstat (limited to 'services/java/com/android/server/ConnectivityService.java')
-rw-r--r--services/java/com/android/server/ConnectivityService.java54
1 files changed, 13 insertions, 41 deletions
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index c28a3733edb9..b6d725ff43ff 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -33,6 +33,7 @@ import android.net.wifi.WifiStateTracker;
import android.net.NetworkUtils;
import android.os.Binder;
import android.os.Handler;
+import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
@@ -158,52 +159,20 @@ public class ConnectivityService extends IConnectivityManager.Stub {
}
RadioAttributes[] mRadioAttributes;
- private static class ConnectivityThread extends Thread {
- private Context mContext;
-
- private ConnectivityThread(Context context) {
- super("ConnectivityThread");
- mContext = context;
- }
-
- @Override
- public void run() {
- Looper.prepare();
- synchronized (this) {
- sServiceInstance = new ConnectivityService(mContext);
- notifyAll();
- }
- Looper.loop();
- }
-
- public static ConnectivityService getServiceInstance(Context context) {
- ConnectivityThread thread = new ConnectivityThread(context);
- thread.start();
-
- synchronized (thread) {
- while (sServiceInstance == null) {
- try {
- // Wait until sServiceInstance has been initialized.
- thread.wait();
- } catch (InterruptedException ignore) {
- Slog.e(TAG,
- "Unexpected InterruptedException while waiting"+
- " for ConnectivityService thread");
- }
- }
- }
-
- return sServiceInstance;
+ public static synchronized ConnectivityService getInstance(Context context) {
+ if (sServiceInstance == null) {
+ sServiceInstance = new ConnectivityService(context);
}
- }
-
- public static ConnectivityService getInstance(Context context) {
- return ConnectivityThread.getServiceInstance(context);
+ return sServiceInstance;
}
private ConnectivityService(Context context) {
if (DBG) Slog.v(TAG, "ConnectivityService starting up");
+ HandlerThread handlerThread = new HandlerThread("ConnectivityServiceThread");
+ handlerThread.start();
+ mHandler = new MyHandler(handlerThread.getLooper());
+
// setup our unique device name
String id = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
@@ -234,7 +203,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
mNetTrackers = new NetworkStateTracker[
ConnectivityManager.MAX_NETWORK_TYPE+1];
- mHandler = new MyHandler();
mNetworkPreference = getPersistedNetworkPreference();
@@ -1580,6 +1548,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
// must be stateless - things change under us.
private class MyHandler extends Handler {
+ public MyHandler(Looper looper) {
+ super(looper);
+ }
+
@Override
public void handleMessage(Message msg) {
NetworkInfo info;