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

        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 static void main(String[] args) {

       new SystemServer().run();

    }

    private void run() {

   //Start services.

   startBootstrapServices();

       startCoreServices();

       startOtherServices();

   。。。。。

    }

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

   static final void startSystemUi(Context context) {

        Intent intent= new Intent();

        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();

     }

       

你可能感兴趣的:(Android,源码学习)