2018-07-12 systemserver

文件目录 java/com/Android/server/systemserver/

函数入口

   /**

    * The main entry point from zygote.

    */

    public static void main(String[] args) {

        new SystemServer().run();

    }

构造了一个新的对象后调用了方法run();

public SystemServer() {

        // Check for factory test mode.

        mFactoryTestMode = FactoryTest.getMode();

        // Remember if it's runtime restart(when sys.boot_completed is already set) or reboot

        mRuntimeRestart = "1".equals(SystemProperties.get("sys.boot_completed"));

    }

private void run() {

        try {

            traceBeginAndSlog("InitBeforeStartServices");//log,标记位

            // 时区相关设置

             。。。。。

            //语言

             。。。。。

            Binder.setWarnOnBlocking(true);//事物阻塞时候进程发出警告

            Slog.i(TAG, "Entered the Android system server!");

            int uptimeMillis = (int) SystemClock.elapsedRealtime();

            EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_SYSTEM_RUN, uptimeMillis);

            if (!mRuntimeRestart) {

                MetricsLogger.histogram(null, "boot_system_server_init", uptimeMillis);

            }


            SystemProperties.set("persist.sys.dalvik.vm.lib.2", VMRuntime.getRuntime().vmLibrary());

            VMRuntime.getRuntime().clearGrowthLimit();//清理内存获取最大的内存

            //system server应该一直处于运行中,需要让它尽可能高效的使用内存,强程序堆内存的处理效率,干预GC

            VMRuntime.getRuntime().setTargetHeapUtilization(0.8f);

            Build.ensureFingerprintProperty();//某些设备依赖于指纹,所以在booting 引导之前就进行定义初始化

            Environment.setUserRequired(true);//在system server中,没有指定一个用户就去访问环境目录是错误的

            BaseBundle.setShouldDefuse(true);//任何传入的bundle应该避免被抛出BadParcelableException异常

            BinderInternal.disableBackgroundScheduling(true);//保证binder的调用在后台

            BinderInternal.setMaxThreads(sMaxBinderThreads);//设置binder线程最大数字,增加数量

            // 准备looper

            android.os.Process.setThreadPriority(

                android.os.Process.THREAD_PRIORITY_FOREGROUND);//设置前台进程

            android.os.Process.setCanSelfBackground(false);//不能变成后台进程

            Looper.prepareMainLooper();

           //加载本地方法线程

            System.loadLibrary("android_servers");

            performPendingShutdown();//检查上次关机是否正常

            createSystemContext();//初始化上下文

            // 创建service manager.主要用来管理service

            mSystemServiceManager = new SystemServiceManager(mSystemContext);

            mSystemServiceManager.setRuntimeRestarted(mRuntimeRestart);

            LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);

            SystemServerInitThreadPool.get();// 为可以并行化的init任务准备线程池

        } finally {

            traceEnd();  // InitBeforeStartServices

        }

        // 启动service

        try {

            traceBeginAndSlog("StartServices");

            startBootstrapServices();

            startCoreServices();

            startOtherServices();//下面分析

            SystemServerInitThreadPool.shutdown();

        } catch (Throwable ex) {

            Slog.e("System", "******************************************");

            Slog.e("System", "************ Failure starting system services", ex);

            throw ex;

        } finally {

            traceEnd();

        }

        // For debug builds, log event loop stalls to dropbox for analysis.

        if (StrictMode.conditionallyEnableDebugLogging()) {

            Slog.i(TAG, "Enabled StrictMode for system server main thread.");

        }

        if (!mRuntimeRestart && !isFirstBootOrUpgrade()) {

            int uptimeMillis = (int) SystemClock.elapsedRealtime();

            MetricsLogger.histogram(null, "boot_system_server_ready", uptimeMillis);

            final int MAX_UPTIME_MILLIS = 60 * 1000;

            if (uptimeMillis > MAX_UPTIME_MILLIS) {

                Slog.wtf(SYSTEM_SERVER_TIMING_TAG,

                        "SystemServer init took too long. uptimeMillis=" + uptimeMillis);

            }

        }

        // Loop f一直在轮询.

        Looper.loop();

        throw new RuntimeException("Main thread loop unexpectedly exited");

    }


-startOtherServices

   //startOtherServices启动不是特别重要的service,状态栏信息显示,比如电池,wifi信号,3G/4G等icon显示,通知面板,比如系统消息,              //第三方应用消息,/近期任务栏显示面板,比如长按近期任务快捷键,显示近期使用的应用,截图服务,壁纸服务

startOtherServices(){

    //启动很多service



mActivityManagerService.systemReady(new Runnable() {

            @Override           

             public void run() {

                Slog.i(TAG, "Making services ready");

                ......

                Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "StartSystemUI");

                //启动一些service   TwilightService,Lifecycle等等

                try {

                    startSystemUi(context);//启动SystemUIService启动一系列服

                } catch (Throwable e) {

                    reportWtf("starting System UI", e);

                }

                Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);

                ......

            }           

        });

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,689评论 0 3
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,289评论 0 10
  • Swift3.0 - 真的很简单Swift3.0 - 数据类型Swift3.0 - ArraySwift3.0 -...
    酷走天涯阅读 11,327评论 17 37
  • 东南风 回去又是逆风行 又是一个冬 无力又一年 转载加深一些时间 沉沦 只是旅行 独行的一个借口 想自己是个流浪的...
    陈词滥调振振有词阅读 164评论 0 1
  • 草痕雪藏冻土,佳措点入荒原。横断逡险过祁连。乘风识天路,云纵昆仑山。 置身非常境地,此世第一高寒。古今未有更苍然。...
    淮扬先生阅读 171评论 1 6