ConnectivityManager.java在数据业务创建成功(CALLBACK_AVAILABLE)和关闭(CALLBACK_LOST)后等条件都会调用到此处.
对应的文件位置在:\frameworks\base\core\java\android\net\ConnectivityManager.java
对应的CallbackHandler为ConnectivityManager里面的内部类, 如果APP需要在某个时候在链接成功或者断开后进行通知可以再此进行定制.
public void handleMessage(Message message) {
NetworkRequest request = (NetworkRequest) getObject(message, NetworkRequest.class);
Network network = (Network) getObject(message, Network.class);
if (DBG) {
Log.d(TAG, whatToString(message.what) + " for network " + network);
}
switch (message.what) {
case CALLBACK_PRECHECK: {
NetworkCallback callback = getCallback(request, "PRECHECK");
if (callback != null) {
callback.onPreCheck(network);
}
break;
}
case CALLBACK_AVAILABLE: {
NetworkCallback callback = getCallback(request, "AVAILABLE");
if (callback != null) {
callback.onAvailable(network);
}
break;
}
case CALLBACK_LOSING: {
NetworkCallback callback = getCallback(request, "LOSING");
if (callback != null) {
callback.onLosing(network, message.arg1);
}
break;
}
case CALLBACK_LOST: {
NetworkCallback callback = getCallback(request, "LOST");
if (callback != null) {
callback.onLost(network);
}
break;
}
case CALLBACK_UNAVAIL: {
NetworkCallback callback = getCallback(request, "UNAVAIL");
if (callback != null) {
callback.onUnavailable();
}
break;
}
case CALLBACK_CAP_CHANGED: {
NetworkCallback callback = getCallback(request, "CAP_CHANGED");
if (callback != null) {
NetworkCapabilities cap = (NetworkCapabilities)getObject(message,
NetworkCapabilities.class);
callback.onCapabilitiesChanged(network, cap);
}
break;
}
case CALLBACK_IP_CHANGED: {
NetworkCallback callback = getCallback(request, "IP_CHANGED");
if (callback != null) {
LinkProperties lp = (LinkProperties)getObject(message,
LinkProperties.class);
callback.onLinkPropertiesChanged(network, lp);
}
break;
}
case CALLBACK_SUSPENDED: {
NetworkCallback callback = getCallback(request, "SUSPENDED");
if (callback != null) {
callback.onNetworkSuspended(network);
}
break;
}
case CALLBACK_RESUMED: {
NetworkCallback callback = getCallback(request, "RESUMED");
if (callback != null) {
callback.onNetworkResumed(network);
}
break;
}
case CALLBACK_RELEASED: {
NetworkCallback callback = null;
synchronized(mCallbackMap) {
callback = mCallbackMap.remove(request);
}
if (callback != null) {
synchronized(mRefCount) {
if (mRefCount.decrementAndGet() == 0) {
getLooper().quit();
}
}
} else {
Log.e(TAG, "callback not found for RELEASED message");
}
break;
}
case CALLBACK_EXIT: {
Log.d(TAG, "Listener quitting");
getLooper().quit();
break;
}
case EXPIRE_LEGACY_REQUEST: {
expireRequest((NetworkCapabilities)message.obj, message.arg1);
break;
}
}
}