android 6.0 关于SystemUI 的启动流程浅析(一)

来源:互联网 发布:linux shell 控制语句 编辑:程序博客网 时间:2024/05/01 08:06

        SystemUI一直都是andorid系统中重要的组成部分,针对它的分析网上例子也非常多,但主要是较早期版本。目前工作中经常遇到关于的它内容,于是就对它的流程做一个浅要分析,作为自己学习的心得体会。以下内容针对的是6.0系统。关于SystemUI里面细节知识点非常多,无法将所有内容分析到位,不足之处还请指正。      

       SystemUI中包含状态栏(StatusBar)和导航栏(NavigationBar)。状态栏中主要用来显示信号,蓝牙标志,Wifi信息,由于状态栏需要实时反馈系统的状态给用户,所以它必须常驻系统内存中。Andriod中能够长期存在的只有服务(service),所以SystemUI也是有服务管理。

         在andorid系统中SystemUI是由SystemUIService启动的,而SystemUIService又是SystemServer启动的。当android系统初始化完成后,SystemServer就会被启动。关于代码路径位于:frameworks/base/packages/SystemUI

         现在来分析SystemUI的启动流程:

         如上所述,通过SystemServer来启动SystemUIService

源码地址:

frameworks/base/services/java/com/android/server/SystemServer.java

   /**

   *调用该程序的入口

   */

   public staticvoid main(String[] args) {

      new SystemServer().run();

   }

   private void run() {

  //Start services.

   startBootstrapServices();

      startCoreServices();

      startOtherServices();

  。。。。。

   }

   //SystemServer加载时,通过该静态方法启动SystemUIService服务;

  staticfinal void startSystemUi(Context context) {

       Intent intent= newIntent();

       intent.setComponent(newComponentName("com.android.systemui",

         "com.android.systemui.SystemUIService"));

         //Slog.d(TAG,"Starting service: " + intent);

       context.startServiceAsUser(intent,UserHandle.OWNER);

   }

源码地址:

frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIService.java

    //SystemUIService启动完成后,就会执行startServicesIfNeeded();

    @Override

     public void onCreate() {

        super.onCreate();

       ((SystemUIApplication)getApplication()).startServicesIfNeeded();

    }

    //在这个方法中,就会启动所有的在SystemUI中需要启动的服务;

     public void startServicesIfNeeded() {

         //开始启动里面继承SystemUIservices

    //KeyguardViewMediator

    //Recents

    //VolumeUI

    //SystemBars

    //StorageNotification

    //PowerUI

    //RingtonePlayer

   mServices[i].start();

    }

       

0 0
原创粉丝点击