Android很多事件都是通过uevent跟kernel来异步通信的。其中类UEventObserver是核心。 UEventObserver接收kernel的uevent信息的抽象类。

1、server层代码 1)battery server:

frameworks/base/services/java/com/android/server/SystemServer.java  frameworks/base/services/java/com/android/server/BatteryService.java  

2、java层代码

frameworks/base/core/java/android/os/UEventObserver.java  

3、JNI层代码

frameworks/base/core/jni/android_os_UEventObserver.cpp  

4、底层代码

hardware/libhardware_legacy/uevent/uevent.c  
读写kernel的接口socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); 原理:通过kobject_uevent的方式通知应用层,往一个socket广播一个消息。应用层打开socket监听NETLINK_KOBJECT_UEVENT组的消息,就可以收到了。

插入耳机相关的代码:

hardware/libhardware_legacy/uevent  frameworks/base/core/jni/android_os_UEventObserver.cpp  frameworks/base/core/java/android/os/UEventObserver.java  frameworks/base/services/java/com/android/server/SystemServer.java  frameworks/base/services/java/com/android/server/HeadsetObserver.java  

更多相关文章

  1. Android(安卓)中各种XML文件的作用
  2. Android第五十二期 - 云之讯的代码混淆
  3. Android中的strings文件中字符串的拼接
  4. Android中有关Handler的使用(二)
  5. Android学习心得(六)——位置服务
  6. Android消息处理机制
  7. Android(安卓)调用系统Camera
  8. Android中不常见的监听: 鼠标划过/双击/右键
  9. Android(安卓)WebView 支持H5图片上传

随机推荐

  1. android 事件总线 -- Otto(一)
  2. android文档开发规范
  3. 初涉Android蓝牙开发
  4. Android远程服务三:android AIDL远程服务
  5. Android(安卓)UI设计技巧
  6. Android实现天气预报温度/气温折线趋势图
  7. cocos2dx在windows下开发,编译到android上
  8. 听说”双11”是这么解决线上bug的
  9. Android尺寸单位
  10. Android(安卓)获取屏幕尺寸与密度