- 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() {}
@Override
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);
}