[Android4.4]NetworkManagementService与Netd交互流程
2016-01-22 17:13
387 查看
接收netd事件流程:
NetworkManagementService.create -> SystemServer.java
create -> //socket name 是NETD_SOCKET_NAME,即netd
new NetworkManagementService ->
new NativeDaemonConnector -> //NativeDaemonConnector.java 参数有个new NetdCallbackReceiver,当此类和netd建立socket通信时,会调用此callback
new Thread //把NativeDaemonConnector放到thread中去跑
run ->
new Handler //会用到其消息机制
listenToSocket ->
new LocalSocket
socket.connect
mCallbacks.onDaemonConnected //socket建立后就调用它
onDaemonConnected //NetworkManagementService.java
inputStream.read //循环监听socket netd过来的事件,有事件就读取
mCallbackHandler.sendMessage ->
handleMessage -> //NativeDaemonConnector.java
mCallbacks.onEvent ->
onEvent //NetworkManagementService.java处理各种事件
发送命令给netd:
比如拿stopAccessPoint为例:
stopAccessPoint -> //NetworkManagementService.java
mConnector.execute -> //cmd为softap stopap
execute -> //NativeDaemonConnector.java
mOutputStream.write -> //mOutputStream在上面提到的listenToSocket建立,也是基于netd socket的,所以会触发netd socket接收事件
SocketListener::startListener -> //注意这里已经在另一个进程了
listen
pthread_create //创建线程,执行SocketListener::threadStart
me->runListener ->
select
accept
onDataAvailable ->
FrameworkListener::onDataAvailable ->
dispatchCommand ->
c->runCommand ->
CommandListener::SoftapCmd::runCommand ->
sSoftapCtrl->stopSoftap ->
kill
NetworkManagementService.create -> SystemServer.java
create -> //socket name 是NETD_SOCKET_NAME,即netd
new NetworkManagementService ->
new NativeDaemonConnector -> //NativeDaemonConnector.java 参数有个new NetdCallbackReceiver,当此类和netd建立socket通信时,会调用此callback
new Thread //把NativeDaemonConnector放到thread中去跑
run ->
new Handler //会用到其消息机制
listenToSocket ->
new LocalSocket
socket.connect
mCallbacks.onDaemonConnected //socket建立后就调用它
onDaemonConnected //NetworkManagementService.java
inputStream.read //循环监听socket netd过来的事件,有事件就读取
mCallbackHandler.sendMessage ->
handleMessage -> //NativeDaemonConnector.java
mCallbacks.onEvent ->
onEvent //NetworkManagementService.java处理各种事件
发送命令给netd:
比如拿stopAccessPoint为例:
stopAccessPoint -> //NetworkManagementService.java
mConnector.execute -> //cmd为softap stopap
execute -> //NativeDaemonConnector.java
mOutputStream.write -> //mOutputStream在上面提到的listenToSocket建立,也是基于netd socket的,所以会触发netd socket接收事件
SocketListener::startListener -> //注意这里已经在另一个进程了
listen
pthread_create //创建线程,执行SocketListener::threadStart
me->runListener ->
select
accept
onDataAvailable ->
FrameworkListener::onDataAvailable ->
dispatchCommand ->
c->runCommand ->
CommandListener::SoftapCmd::runCommand ->
sSoftapCtrl->stopSoftap ->
kill
相关文章推荐
- 01Android_Studio过滤文件提交至Git
- Android 数字签名详解
- unable to access android sdk add-on list
- Android Design Support Library 介绍
- [AndroidAnnotatians] Intent传参
- Android HandlerThread 完全解析
- android 新特性material design 之recyclerview 详解
- Android 关闭多个Activity总结
- android 汉字,拼音和英文返回大写首字母
- Android Native添加JNI接口实例
- Android中处理崩溃异常
- 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
- Android和iPhone买哪个好呢?
- android中xml tools属性详解
- android edittext 限制输入框小数位数
- android 内存优化分析
- Android支付宝支付封装代码
- android 圆形图片多种实现方式
- (三)为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口
- android源码中打包so到apk的方法