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);
}
app