Android系统通知处理流程
2015-01-10 19:59
323 查看
最近在分析Android系统的通知处理机制,觉得有必要梳理个笔记出来,供日后参考。
应用层使用NotificationManager系统服务进行通知显示,大体经过了NotificationManagerService -> StatusBarManagerService -> SystemUI 这么几个阶段,之前使用Binder进行相互通讯。相关模块组织结构如下图所示,一目了然:
ServiceManager、SystemSerer和SystemUI是android系统三个非常重要的进程,相信熟悉Android系统框架的亲们已经比较了解了。所有的系统服务都是运行在SystemServer这个进程中,并且将自身注册到ServiceManager中。应用层通过Framework API发送通知时,会通过Binder驱动相应地调用NotificationManagerService的enqueueNotification方法。enqueueNotification方法记录通知内容,调用StatusBarManangerService的updateNotifcation接口,并且执行响铃、震动和呼吸灯效果,最后,如果有注册相应的辅助服务(AccessibilityService),则给辅助服务发送通知事件。StatusBarManagerService会将通知事件再次转发给SystemUI中负责通知栏显示的StatusBar。注意到Android系统内建有两个通知栏,一个是PhoneStatusBar,一个是TabletStatusBar,根据系统配置的类型决定用哪一种。
然后附带聊一下通知拦截的问题吧。根据上面的流程可以看到,有三个地方可以作为通知拦截的切入点。但是注意到响铃、震动和呼吸灯是由NotificationManagerService控制的,所以直接在第一环节切掉是最干净的。至于具体怎么切,root后你懂的。
应用层使用NotificationManager系统服务进行通知显示,大体经过了NotificationManagerService -> StatusBarManagerService -> SystemUI 这么几个阶段,之前使用Binder进行相互通讯。相关模块组织结构如下图所示,一目了然:
ServiceManager、SystemSerer和SystemUI是android系统三个非常重要的进程,相信熟悉Android系统框架的亲们已经比较了解了。所有的系统服务都是运行在SystemServer这个进程中,并且将自身注册到ServiceManager中。应用层通过Framework API发送通知时,会通过Binder驱动相应地调用NotificationManagerService的enqueueNotification方法。enqueueNotification方法记录通知内容,调用StatusBarManangerService的updateNotifcation接口,并且执行响铃、震动和呼吸灯效果,最后,如果有注册相应的辅助服务(AccessibilityService),则给辅助服务发送通知事件。StatusBarManagerService会将通知事件再次转发给SystemUI中负责通知栏显示的StatusBar。注意到Android系统内建有两个通知栏,一个是PhoneStatusBar,一个是TabletStatusBar,根据系统配置的类型决定用哪一种。
然后附带聊一下通知拦截的问题吧。根据上面的流程可以看到,有三个地方可以作为通知拦截的切入点。但是注意到响铃、震动和呼吸灯是由NotificationManagerService控制的,所以直接在第一环节切掉是最干净的。至于具体怎么切,root后你懂的。
相关文章推荐
- MT6573 android 系统默认语言处理流程
- Android系统input按键处理流程(从驱动到framework)【转】
- Android 使用动画效果后的控件位置处理 类似系统通知栏下拉动画
- Android View系统源码分析(一)——概述&触摸事件总体处理流程
- MTK Android平台系统语言处理流程
- Android简易的自动更新(通知栏+系统下载),包含7.0系统解析安装包失败的处理
- Android系统广播(3)–客户端广播处理流程
- android 2.3系统默认语言处理流程
- Android系统input按键处理流程(从驱动到framework)
- Android 使用动画效果后的控件位置处理 类似系统通知栏下拉动画!!
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口
- WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口
- Android事件处理分析+Android事件处理 +Android输入事件流程
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 深入理解Android消息处理系统——Looper、Handler、Thread
- android系统启动流程分析: