Fix and simplify ConnectivityService singleton.

Change-Id: Idb74854db9d801c1cc138eb5ca866cf01940ff6d
This commit is contained in:
Wink Saville
2010-09-02 19:23:52 -07:00
parent 56023ad2c6
commit 775aad68d3

View File

@@ -33,6 +33,7 @@ import android.net.wifi.WifiStateTracker;
import android.net.NetworkUtils; import android.net.NetworkUtils;
import android.os.Binder; import android.os.Binder;
import android.os.Handler; import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder; import android.os.IBinder;
import android.os.Looper; import android.os.Looper;
import android.os.Message; import android.os.Message;
@@ -158,52 +159,20 @@ public class ConnectivityService extends IConnectivityManager.Stub {
} }
RadioAttributes[] mRadioAttributes; RadioAttributes[] mRadioAttributes;
private static class ConnectivityThread extends Thread { public static synchronized ConnectivityService getInstance(Context context) {
private Context mContext; if (sServiceInstance == null) {
sServiceInstance = new ConnectivityService(context);
private ConnectivityThread(Context context) {
super("ConnectivityThread");
mContext = context;
} }
return sServiceInstance;
@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 ConnectivityService getInstance(Context context) {
return ConnectivityThread.getServiceInstance(context);
} }
private ConnectivityService(Context context) { private ConnectivityService(Context context) {
if (DBG) Slog.v(TAG, "ConnectivityService starting up"); 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 // setup our unique device name
String id = Settings.Secure.getString(context.getContentResolver(), String id = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID); Settings.Secure.ANDROID_ID);
@@ -234,7 +203,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
mNetTrackers = new NetworkStateTracker[ mNetTrackers = new NetworkStateTracker[
ConnectivityManager.MAX_NETWORK_TYPE+1]; ConnectivityManager.MAX_NETWORK_TYPE+1];
mHandler = new MyHandler();
mNetworkPreference = getPersistedNetworkPreference(); mNetworkPreference = getPersistedNetworkPreference();
@@ -1580,6 +1548,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
// must be stateless - things change under us. // must be stateless - things change under us.
private class MyHandler extends Handler { private class MyHandler extends Handler {
public MyHandler(Looper looper) {
super(looper);
}
@Override @Override
public void handleMessage(Message msg) { public void handleMessage(Message msg) {
NetworkInfo info; NetworkInfo info;