Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Android 4.0 statusbar加载icon

StatusBar分为两个部分:一是通常在手机界面最上端的未下拉的statusbar;二是下拉状态栏,也就是扩展状态栏。通过在实际应用中,我们可以发现,statusbar就是一个activity,那么,它的使用自然少不了和service之间的交互。PhoneStatusBar 通过IStatusBarService来访问StatusBarManagerService,而StatusBarManagerService通过CommandQueue来和PhoneStatusBar进行交互。一、StatusBar.java通过class StatusBar的声明,我们可以看出,它或者其子类实现和StatusBarManagerService进行交互的CommandQueue的回调方法。public abstract class StatusBar extends SystemUI implements CommandQueue.Callbacks {public void start() {View sb = makeStatusBarView();//创建包括在config.xml中定义要在statusbar上显示的所有icons,那么它包含icons个数在何处初始化?        StatusBarIconList iconList = new StatusBarIconList();//保存Notification是以Binder为key的        ArrayList<IBinder> notificationKeys = new ArrayList<IBinder>();//保存在statusbar上显示的StatusBarNotification        ArrayList<StatusBarNotification> notifications = new ArrayList<StatusBarNotification>();        //和IStatusBarService进行交互的IBindermCommandQueue = new CommandQueue(this, iconList);//获取StatusBarManagerService的本地实现        mBarService = IStatusBarService.Stub.asInterface(                ServiceManager.getService(Context.STATUS_BAR_SERVICE));        int[] switches = new int[7];        ArrayList<IBinder> binders = new ArrayList<IBinder>();        try {//这一步实际上就是将PhoneStatusBar的实现的CommandQueue其中包含//callbacks传递给StatusbarManagerService使用            mBarService.registerStatusBar(mCommandQueue, iconList, notificationKeys, notifications,                    switches, binders);        } catch (RemoteException ex) {            // If the system process isn"t there we"re doomed anyway.        }for (int i=0; i<N; i++) {   //这里第一次使用时icon仅仅是开辟一个存储空间,i代表的是数组的index,而viewIndex和i对应       StatusBarIcon icon = iconList.getIcon(i);       if (icon != null) {           addIcon①(iconList.getSlot(i), i, viewIndex, icon);           viewIndex++;       }}N = notificationKeys.size();if (N == notifications.size()) {    for (int i=0; i<N; i++) {          addNotification②(notificationKeys.get(i), notifications.get(i));    }} else {            }//xml文件中定义的statusbar的heightfinal int height = getStatusBarHeight();}//这里将所有的状态栏上的view先初始化WindowManagerImpl.getDefault().addView(sb, lp);}