QC 功能添加
需求:当收到广播的时候,开始在n秒内监听某文件,如果当中的某个内容改变了,就弹出一个AlertDialog
当收到系统通知的时候 需要在plugged的基础上进行UEvent的监听,但是,经过观察发现,UEvent并不能直接在SystemUI部分进行监听,其他设置监听的地方都是在framework/base/servers/下边的类进行监听。
通过进一步的阅读源码,发现BatteryService居然是发出之前我们需要收到的广播的类,所以我就自己创建了一个Action,将action添加到Intent当中,UEvent监听到了数据变化就会发一个广播出去,如果PowerUI监听到了自定义的Action的话,就可以继续进行了, 但是事情并没有那么简单,由于并不能直接像之前PowerUI.onReceive一样使用plugged !=oldPlugged 一样来判断插拔(延迟问题)所以导致了Dialog的show和dismiss被反复调用了多次,导致在充电期间每隔几十秒都会重新弹出Dialog,这次就在PowerNotificationWarning里面改变了SystemDiaolog的置空时机并非在onDismiss方法内置空,而是在接受到了拔出充电线命令的时候置为null,这样就可以保证在插入期间只会弹出一次Dialog
这个项目由于之后客户更改了需求,所以第一次的需求总结如下
首先做一个总结,第一接收到系统通知的时候,我分别对plugged和oldPlugged的时候进行判断,其实,这两个判断完全可以合并成一个,并且在读取文件的时候我使用了多线程,主要利用内部类集成Thread的方法来实现,怎么想都太过于麻烦,但是确实没有什么便利的办法,还有就是AsyncTask,这个虽然简便,但是消耗资源更大,后来上网查了一下,有线程池可以使用,但是我在源码里面查了一下,SystemUI部分基本没有使用线程池,至少我没在SystemUI下有搜索到ExecutorService这个类的定义以及引用,最后还是放弃了多线程,直接在UI线程下读取文件.这次编写由于开始是自己写的,我对review之前和review之后的patch进行对比,发现的确代码整洁优雅了不少,还有要注意的一点就是,如果下回还有写代码的机会的话,一定要仿照google的代码写.的确能够规避大部分的问题.