引言

notification.jpg

Notification 在v7版本下从4.0后增加了Media Style. 今天我们分析下Notification在v7版本的源码。有助于我们针对不同版本的Notification做出合适样式选择。

Notification使用流程

现在我们使用Notification基本都是如下步骤:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context);

builder.setContentText

.setSmallIcon

.set...

Notification notification = builder.build();

notificationManager.notify(TYPE_BigText,notification);

我们看一下涉及到的类定义:

NotificationCompat

Helper for accessing features in Notification introduced after API level 4 in a backwards compatible fashion.

帮助Notification存储细节。

NotificationCompat.Builder

Builder class for NotificationCompat objects. Allows easier control over all the flags, as well as help constructing the typical notification layouts.

NotificationCompat对象的构造器类,构造Notification的样式。

当Notification构建好之后最后一个步骤:

NotificationManager

Post a notification to be shown in the status bar. If a notification with the same id has already been posted by your application and has not yet been canceled, it will be replaced by the updated information.

推送一个Notification到状态栏,如果应用中已经有了一个同样的Notification Id 将会被代替并更新。

Android support v7中的Notification相关类

v7对v4中的Notification进行扩展。

v7下NotificationCompat的定义

v7_NotificationCompat.jpg

然后我来看下NotificationCompat.Builder的定义

v7_NotificationCompat.Builder.jpg

Builder重写了v4下的getExtender() method,看下返回类型BuilderExtender 找到这样的定义

Interface for appcompat to extend v4 builder with media style.

appcompat 用来扩增v4 media style 的接口

我们再仔细看getExtender中的代码,针对不同版本sdk,返回不同版本的BuilderExtender.

针对ICE_CREAM_SANDWICH版本的BuilderExtender的代码看下:

v7_Notification_Extend.jpg

内部调用add方法进行整理样式

用table显示不同版本扩展mediastyle的method.

版本 | 整理样式的方法

------------- | -------------| -------------

LOLLIPOP (>=Android 5.1) | addMediaStyleToBuilderLollipop

JELLY_BEAN (>=Android4.1&&

ICE_CREAM_SANDWICH (>=Android4.0&&

从这个表格可以知道 4.0以后才出现的Media Style.

再看v4下Builder.build method

v4_NotificationCompat_Builder_build.jpg

最终是通过BuilderExtender构造Notification.

总结

Builder构造好样式后,会根据不同版本生成不同的BuilderExtender.

如果你想知道Notification在不同版本上的限制,你只需要查看不同版本的BuilderExtender的区别即可。

android 源码分析notification,# Notification 源码分析相关推荐

  1. 【Android 启动过程】Activity 启动源码分析 ( ActivityThread 流程分析 二 )

    文章目录 前言 一.ActivityManagerService.attachApplicationLocked 二.ActivityStackSupervisor.attachApplication ...

  2. 【Android 启动过程】Activity 启动源码分析 ( ActivityThread -> Activity、主线程阶段 二 )

    文章目录 前言 一.ActivityThread 类 handleLaunchActivity -> performLaunchActivity 方法 二.Instrumentation.new ...

  3. 【Android 启动过程】Activity 启动源码分析 ( ActivityThread -> Activity、主线程阶段 一 )

    文章目录 前言 一.ClientTransactionHandler.scheduleTransaction 二.ActivityThread.H 处理 EXECUTE_TRANSACTION 消息 ...

  4. 【Android 启动过程】Activity 启动源码分析 ( AMS -> ActivityThread、AMS 线程阶段 二 )

    文章目录 前言 一.热启动与冷启动选择 二.AMS 进程中执行的相关操作 三.通过 Binder 机制转到 ActivityThread 中执行的操作 总结 前言 上一篇博客 [Android 启动过 ...

  5. 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 二 | AMS 进程相关源码 | 主进程相关源码 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  6. 【Android 电量优化】JobScheduler 相关源码分析 ( JobSchedulerService 源码分析 | 任务检查 | 任务执行 )

    文章目录 一.回调 StateChangedListener 接口 二.JobHandler 处理 ( 任务检查 ) 三.maybeRunPendingJobsH 方法 四.assignJobsToC ...

  7. Android 9 (P) Zygote进程启动源码分析指南二

         Android 9 Zygote进程启动源码分析指南二 Android 9 (P) 系统启动及进程创建源码分析目录: Android 9 (P)之init进程启动源码分析指南之一 Andro ...

  8. 【Android】Android Binder进程间通信AIDL示例与源码分析

    前言 众所周知,Android进程间通信采用的是Binder机制.Binder是Android系统独有的进程间通信方式,它是采用mmp函数将进程的用户空间与内核空间的一块内存区域进行映射,免去了一次数 ...

  9. Android 热修复 Tinker接入及源码浅析

    本文已在我的公众号hongyangAndroid首发. 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/54882693 本文出自 ...

最新文章

  1. 逆变器的技术创新 让光伏电站更具发展前景
  2. JS通过正则限制 input 输入框只能输入整数、小数(金额或者现金) 两位小数
  3. log-slave-updates 引起 MySQL 从节点同步异常慢
  4. 都说它是年度Android机皇,【上手】都说它是年度Android机皇,Galaxy Note10到底怎么样?...
  5. Windows+Chrome OS双系统安装方法
  6. html字符串长度函数,最常用的20个javascript方法函数
  7. Tomcat漏洞修复方法【补丁下载及安装详细流程】
  8. 独立事件、笛卡尔积与矩阵向量乘法
  9. pythonchallenge之C++学习篇-01
  10. Tensorflow2.0.0版本和Keras2.4.3不兼容
  11. WinForm程序中使用Unity3D控件
  12. 002649:bootdo项目改造计划
  13. C++ 模板实现—双向链表: doubly linked list
  14. osm数据导入mysql_导入OSM数据至PostgreSQL数据库
  15. 修复打不开计算机管理,win10系统设备管理器打不开的修复技巧
  16. 常见生态问题成因及措施
  17. 为什么安卓手机没有苹果手机流畅?
  18. 用自己电脑搭建外网可访问的服务器
  19. google迈向IoT的开端——推出Android Things操作系统
  20. PCB四层板常规层压结构及设计阻焊-深亚电子

热门文章

  1. 停止追赶最新的 RPA 趋势
  2. H5 与 IOS的爱恨情仇(兼容问题)
  3. select默认下拉箭头改变、option样式清除
  4. 织梦后台如何生成站点地图sitemap.xml
  5. mac下配置eclipse的maven环境
  6. UTF8有BOM和无BOM
  7. thinking in java -- notes-2
  8. php 之fsockopen(转)
  9. vbs创建目录,可循环创建父级目录
  10. Leetcode--2. 两数相加