android之UEventObserver分析

本文深入探讨了Android系统中UEventObserver如何监听kernel事件,以Camera设备为例,阐述了UEventObserver的StartObserving方法、onEvent回调,以及如何通过静态线程UEventThread与内核通信,接收和处理Event事件的过程。
摘要由CSDN通过智能技术生成

众所周知,在安卓系统中有状态栏,不管是手机还是电视,在插入外设的时候,会在顶部状态栏显示小图标。比如,camera设备,耳机设备,U盘,以及电池等等。这些都需要在状态栏动态显示。


从上面这张图片可以看出这些设备都有自己的服务一直在跑,并且都是继承了UEventObserver.java这个类去获取kernel的Event事件。下面将着重分析UEventObserver是如何去监听kernel的Event事件。

以Camera为例,CameraObserver会调用EventObserver的StartObserving方法并重写onEvent方法,从下面的代码看出startobserving会传入一个参数CAMERA_UEVENT_MATCH.

<span style="font-size:18px;">public CameraObserver(Context context) {
        mContext = context;
        startObserving(CAMERA_UEVENT_MATCH);

    }

    @Override
    public void onUEvent(UEventObserver.UEvent event) {
     ……    //检测到Event事件之后,发广播等等
    }</span>

找到UEventObserver看startobserving方法如何实现的。


framework/base/core/java/android/os/UEventObserver.java -- startObserving()
<span style="font-size:18px;">public final void startObserving(String match) {
        if (match == null || match.isEmpty()) {
            throw new IllegalArgumentException("match substring must be non-empty");
        }

        final UEventThread t = getThread();
        t.addObserver(match, this);
    } 
</span>

函数一开始先判断match(前一个代码片段所传入的参数是CAMERA_UEVENT_MATCH)是否为空,如果不为空会做两个动作,调用getThread()方法来获取UEventThread实例t,然后调用t的addObserver()方法。


framework/base/core/java/android/os/UEventObserver.java  -- getThread()

<span style="font-size:18px;">private static UEventThread getThread() {
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值