android zenmode 通知,Android 通知流程

目录

1.framework层中发送通知流程

2.状态栏中通知的显示流程

1.framework层中发送通知流程

NotificationManager.notify(notifyAsUser):

checkFileUriExposed检查是否把音频文件的路径暴露出去了。

fixLegacySmallIcon如果通知没有小图标,就创建一个,紧接着将图标大小裁剪到限制大小以内。

maybeCloneStrippedForDelivery:如果内存太低,就不使用用户自定义的界面。

过滤完后调用NotificationManagerService.enqueueNotificationWithTag

NotificationManagerService.enqueueNotificationWithTag

checkCallerIsSystemOrSameApp:判断调用者app id是否和调用进程一致;

resolveNotificationUid:解析通知的UID

Notification.addFieldsFromContext:添加应用信息

PackageManagerClient.checkPermission:检查是否有着色权限

UsageStats.registerEnqueuedByApp:在NotificationUsageStats中记录通知的状态等

RankingHelper.getNotificationChannel:创建通知信道

RankingHelper.updateNotificationChannel: 根据需要调用,更新通知信道

checkDisqualifyingFeatures:检查是否有不合格的特征

setPendingIntentWhitelistDuration:

EnqueueNotificationRunnable:在工作线程调用实际处理通知内容

EnqueuedNotifications:添加NotificationRecord记录;

scheduleTimeoutLocked:超时处理

handleGroupedNotificationLocked:处理分组通知

RankingHelper.extractSignals:通知排名

Assistants.onNotificationEnqueued: 根据条件调用,通知通知助手有通知加入队列

PostNotificationRunnable:继续处理

处理前台服务的flag;

applyZenModeLocked:判断勿扰模式是否拦截

Listeners.notifyPostedLocked:通知NotificationListeners处理(实现了NotificationListenerService的onNotificationPosted方法,)

GroupHelper.onNotificationPosted:状态栏中可回调此接口

buzzBeepBlinkLocked:震动、响铃或闪光灯。

2.状态栏中通知的显示流程

StatusBar.NotificationListenerWithPlugins.onNotificationPosted---addNotification/updateNotification--createNotificationViews---inflateViews(entry.row创建时应该是为null,更新时不为null。都通过updateNotification更新,Entry在NotificationData.java里面,记录了通知的数据,包括界面数据等;row是ExpandableNotificationRow,本质是个FrameLayout)---updateNotification--ExpandableNotificationRow.updateNotification---NotificationInflater.inflateNotificationViews(在子线程填充通知界面的数据等)---createRemoteViews(构建出所有的view)---apply(相当于使能view)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值