博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NotificationManagerService启动流程以及和app交互实现原理
阅读量:6611 次
发布时间:2019-06-24

本文共 2378 字,大约阅读时间需要 7 分钟。

hot3.png

SystemServer启动(main方法被调用)

public final class SystemServer {
    public static void main(String[] args) {
        new SystemServer().run();
    }
    private void run() {
        mSystemServiceManager = new SystemServiceManager(mSystemContext);
        mSystemServiceManager.startService(NotificationManagerService.class);
    }
}
NotificationManagerService启动(onStart方法被调用)
public class SystemServiceManager {
    public SystemService startService(String className) {
        1. 反射创建NotificationManagerService对象
        2. 调用NotificationManagerService#onStart()方法
    }
}
NotificationManagerService#onStart()初始化
public class NotificationManagerService extends SystemService {
    private final IBinder mService = new INotificationManager.Stub() {}
   
    public void onStart() {
         1. 公布mService,添加到ServiceManager
    }
}
NotificationManager#getService()拿到INotificationManager对象
public class NotificationManager {
    private static INotificationManager sService
    static public INotificationManager getService() {
        if (sService != null) {
            return sService;
        }
        IBinder b = ServiceManager.getService("notification");
        sService = INotificationManager.Stub.asInterface(b);
        return sService;
    }
}
NotificationManager通过INotificationManager接口调用NotificationManagerService里的INotificationManager.Stub()对象
public class NotificationManagerService extends SystemService {
    private final IBinder mService = new INotificationManager.Stub() {
         1. 取消通知
         2. 获取当前通知
         3. 注册监听器NotificationListenerService#INotificationListener
         3. 取消监听器NotificationListenerService#INotificationListener
    }
}
NotificationListenerService 里封装了INotificationListener对象
NotificationListenerService extends Service {
    private INotificationListenerWrapper mWrapper = null;
    private class INotificationListenerWrapper extends INotificationListener.Stub {}
    1. 创建INotificationListenerWrapper对象
    2. 通过INotificationManager注册INotificationListener
}
实现INotificationListener回调接口
oneway interface INotificationListener
{
    void onListenerConnected(in NotificationRankingUpdate update);
    void onNotificationPosted(in IStatusBarNotificationHolder notificationHolder,
            in NotificationRankingUpdate update);
    void onNotificationRemoved(in IStatusBarNotificationHolder notificationHolder,
            in NotificationRankingUpdate update);
    void onNotificationRankingUpdate(in NotificationRankingUpdate update);
    void onListenerHintsChanged(int hints);
    void onInterruptionFilterChanged(int interruptionFilter);
}
 

转载于:https://my.oschina.net/u/920274/blog/3059576

你可能感兴趣的文章
【转】聚集索引和非聚集索引的区别
查看>>
【转】mac os 安装php
查看>>
C# DllImport的用法
查看>>
Github-Client(ANDROID)开源之旅(二) ------ 浅析ActionBarSherkLock
查看>>
no identities are available for signing
查看>>
javascript 和 jquery插件开发
查看>>
Linux Shell文件差集
查看>>
eclipse中如何去除警告:Class is a raw type. References to generic type Class<T> should be parameterized...
查看>>
Gradle脚本基础全攻略
查看>>
Django模版中的过滤器详细解析 Django filter大全
查看>>
Linux中使用pwconv实现passwd中密码到shadow
查看>>
MongoDB C++ gridfs worked example
查看>>
Visual Studio 2017各版本安装包离线下载
查看>>
C#线程安全的那些事
查看>>
【论文笔记】Social Role-Aware Emotion Contagion in Image Social Networks
查看>>
rpm安装PostgreSQL
查看>>
k sum(lintcode)
查看>>
28. extjs中Ext.BLANK_IMAGE_URL的作用
查看>>
Hibernate注解配置N:N关联
查看>>
Android 控件属性
查看>>