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)
 

猜你喜欢

转载自blog.csdn.net/lanmengfenghe/article/details/106916782