ConnectivityService: Do not send broadcasts until the system is ready.

Signed-off-by: Mike Lockwood <lockwood@android.com>
This commit is contained in:
Mike Lockwood
2009-08-14 14:18:49 -04:00
parent 2034b91973
commit fde2b76814

View File

@@ -100,6 +100,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
// a process dies // a process dies
private List mFeatureUsers; private List mFeatureUsers;
private boolean mSystemReady;
private ArrayList<Intent> mDeferredBroadcasts;
private class NetworkAttributes { private class NetworkAttributes {
/** /**
* Class for holding settings read from resources. * Class for holding settings read from resources.
@@ -820,7 +823,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
(newNet == null || !newNet.isAvailable() ? "" : " other=" + (newNet == null || !newNet.isAvailable() ? "" : " other=" +
newNet.getNetworkInfo().getTypeName())); newNet.getNetworkInfo().getTypeName()));
mContext.sendStickyBroadcast(intent); sendStickyBroadcast(intent);
/* /*
* If the failover network is already connected, then immediately send * If the failover network is already connected, then immediately send
* out a followup broadcast indicating successful failover * out a followup broadcast indicating successful failover
@@ -843,7 +846,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
intent.putExtra(ConnectivityManager.EXTRA_EXTRA_INFO, intent.putExtra(ConnectivityManager.EXTRA_EXTRA_INFO,
info.getExtraInfo()); info.getExtraInfo());
} }
mContext.sendStickyBroadcast(intent); sendStickyBroadcast(intent);
} }
/** /**
@@ -882,7 +885,33 @@ public class ConnectivityService extends IConnectivityManager.Stub {
intent.putExtra(ConnectivityManager.EXTRA_IS_FAILOVER, true); intent.putExtra(ConnectivityManager.EXTRA_IS_FAILOVER, true);
info.setFailover(false); info.setFailover(false);
} }
sendStickyBroadcast(intent);
}
private void sendStickyBroadcast(Intent intent) {
synchronized(this) {
if (mSystemReady) {
mContext.sendStickyBroadcast(intent); mContext.sendStickyBroadcast(intent);
} else {
if (mDeferredBroadcasts == null) {
mDeferredBroadcasts = new ArrayList<Intent>();
}
mDeferredBroadcasts.add(intent);
}
}
}
void systemReady() {
synchronized(this) {
mSystemReady = true;
if (mDeferredBroadcasts != null) {
int count = mDeferredBroadcasts.size();
for (int i = 0; i < count; i++) {
mContext.sendStickyBroadcast(mDeferredBroadcasts.get(i));
}
mDeferredBroadcasts = null;
}
}
} }
private void handleConnect(NetworkInfo info) { private void handleConnect(NetworkInfo info) {