国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android SystemServer 啟動流程分析

這篇具有很好參考價值的文章主要介紹了Android SystemServer 啟動流程分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

Android SystemServer 啟動流程分析,android

和你一起終身學(xué)習(xí),這里是程序員Android

經(jīng)典好文推薦,通過閱讀本文,您將收獲以下知識點(diǎn):

一、SystemServer 啟動的服務(wù)有哪些
二、SystemServer啟動總體流程概述
三、SystemServer 如何啟動,是誰啟動的?
四、 SystemServer 啟動入門 main 方法
五、SystemServer Run 方法初始與啟動
六、SystemServer 的引導(dǎo)服務(wù)有哪些
七、SystemServer 的核心服務(wù)有哪些
八、SystemServer 的其他服務(wù)有哪些

一、SystemServer 啟動的服務(wù)有哪些

SystemServer?主要啟動?ActivityManagerService、PackageManagerServiceWindowManagerService、LightsServiceLightsService、BatteryServiceTelephonyRegistry、RecoverySystemService?等等,主要分三大類,后文會詳細(xì)列舉。

1.SystemServer 啟動的服務(wù)

Android SystemServer 啟動流程分析,android

SystemServer 啟動的服務(wù)

Android SystemServer 啟動流程分析,android

SystemServer 啟動的服務(wù)

二、SystemServer啟動總體流程概述

1.SystemServer 代碼

\alps\frameworks\base\services\java\com\android\server\SystemServer.java

Android SystemServer 啟動流程分析,android

SystemServer 進(jìn)程啟動導(dǎo)圖

三、SystemServer 如何啟動,是誰啟動的?

SystemServer是通過Zygote?啟動的,在ZygoteInit.java類的(frameworks\base\core\java\com\android\internal\os\ZygoteInit.java)?main方法中通過forkSystemServer啟動。

public static void main(String argv[]) {
        ....
            //設(shè)置變量區(qū)分是否啟動SystemServer
            boolean startSystemServer = false;
            String socketName = "zygote";
            String abiList = null;
            boolean enableLazyPreload = false;
            for (int i = 1; i < argv.length; i++) {
                if ("start-system-server".equals(argv[i])) {
                   // 需要啟動時候,將標(biāo)志位設(shè)置為true
                    startSystemServer = true;
                } else if ("--enable-lazy-preload".equals(argv[i])) {
                    enableLazyPreload = true;
                } 
            ... ...

            if (startSystemServer) {
                // 通過 Zygote  fork 出 SystemServer 
                Runnable r = forkSystemServer(abiList, socketName, zygoteServer);

                // {@code r == null} in the parent (zygote) process, and {@code r != null} in the
                // child (system_server) process.
                if (r != null) {
                    r.run();
                    return;
                }
            }

四、 SystemServer 啟動入門 main 方法

main?入口 通過?new SystemServer().run();開啟SystemServer啟動。

main?入口代碼如下:

/**
     * The main entry point from zygote.
     */
    public static void main(String[] args) {
        new SystemServer().run();
    }

通過Main入口,調(diào)用SystemServer?構(gòu)造方法。

public SystemServer() {
        // 檢查工程模式.
        mFactoryTestMode = FactoryTest.getMode();
        // 判斷是否是重啟
        mRuntimeRestart = "1".equals(SystemProperties.get("sys.boot_completed"));

        mRuntimeStartElapsedTime = SystemClock.elapsedRealtime();
        mRuntimeStartUptime = SystemClock.uptimeMillis();
    }

    private void run() {
       ... ...
    }

五、SystemServer Run 方法初始與啟動

1.SystemServer Run 方法

private void run() {
        try {
            traceBeginAndSlog("InitBeforeStartServices");
            //初始化時間
            if (System.currentTimeMillis() < EARLIEST_SUPPORTED_TIME) {
                Slog.w(TAG, "System clock is before 1970; setting to 1970.");
                SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME);
            }

            //設(shè)置默認(rèn)時區(qū)
            String timezoneProperty =  SystemProperties.get("persist.sys.timezone");
            if (timezoneProperty == null || timezoneProperty.isEmpty()) {
                Slog.w(TAG, "Timezone not set; setting to GMT.");
                SystemProperties.set("persist.sys.timezone", "GMT");
            }
            ... ... 

            // 開始進(jìn)入Android SystemServer
            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);
            }
            ... ...

            //如果支持指紋,需初始化指紋ro.build.fingerprint
            Build.ensureFingerprintProperty();

            ... ...
                
            // 初始化 native services.
            System.loadLibrary("android_servers");

            // 檢查最近一次關(guān)機(jī)是否失敗
            performPendingShutdown();

            // 初始化 the system context.
            createSystemContext();

            // 創(chuàng)建 system service manager.
            mSystemServiceManager = new SystemServiceManager(mSystemContext);
            mSystemServiceManager.setStartInfo(mRuntimeRestart,
                    mRuntimeStartElapsedTime, mRuntimeStartUptime);
            LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);
            // 初始化SystemServer 線程池
            SystemServerInitThreadPool.get();
        } finally {
            traceEnd();  // InitBeforeStartServices
        }
         ... ...
         
        // 開始啟動 services.
        try {
            traceBeginAndSlog("StartServices");
        // 1. 啟動引導(dǎo)服務(wù)  詳見分析六
            startBootstrapServices();
            // 2. 啟動核心服務(wù)  詳見分析七
            startCoreServices();
            // 3.啟動其他服務(wù)  詳見分析八
            startOtherServices();
            SystemServerInitThreadPool.shutdown();
        } catch (Throwable ex) {
            Slog.e("System", "******************************************");
            Slog.e("System", "************ Failure starting system services", ex);
            throw ex;
        } finally {
            traceEnd();
        }

        StrictMode.initVmDefaults(null);


    }

六、SystemServer 的引導(dǎo)服務(wù)有哪些

SystemServer啟動的常用引導(dǎo)服務(wù)有installed 、DeviceIdentifiersPolicyService、 ActivityManagerService.、PowerManagerService 、 RecoverySystemService 、 LightsService 、 PackageManagerService、UserManagerService、OverlayManagerService等。

Android SystemServer 啟動流程分析,android

啟動的引導(dǎo)服務(wù)的大致流程

1.startBootstrapServices代碼

/**
     * Starts the small tangle of critical services that are needed to get
     * the system off the ground.  These services have complex mutual dependencies
     * which is why we initialize them all in one place here.  Unless your service
     * is also entwined in these dependencies, it should be initialized in one of
     * the other functions.
     */
    private void startBootstrapServices() {
        Slog.i(TAG, "Reading configuration...");
        final String TAG_SYSTEM_CONFIG = "ReadingSystemConfig";
        traceBeginAndSlog(TAG_SYSTEM_CONFIG);
        SystemServerInitThreadPool.get().submit(SystemConfig::getInstance, TAG_SYSTEM_CONFIG);
        traceEnd();

        // 啟動 installed
        traceBeginAndSlog("StartInstaller");
        Installer installer = mSystemServiceManager.startService(Installer.class);
        traceEnd();

        //啟動 設(shè)備標(biāo)識符 服務(wù)
        traceBeginAndSlog("DeviceIdentifiersPolicyService");
        mSystemServiceManager.startService(DeviceIdentifiersPolicyService.class);
        traceEnd();

        // 啟動 AMS.
        traceBeginAndSlog("StartActivityManager");
        mActivityManagerService = mSystemServiceManager.startService(
                ActivityManagerService.Lifecycle.class).getService();
        mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
        mActivityManagerService.setInstaller(installer);
        traceEnd();

        //啟動 PMS 
        traceBeginAndSlog("StartPowerManager");
        mPowerManagerService = mSystemServiceManager.startService(PowerManagerService.class);
        traceEnd();

        //初始化電源管理功能
        traceBeginAndSlog("InitPowerManagement");
        mActivityManagerService.initPowerManagement();
        traceEnd();

        // 啟動 RecoverySystemService 
        traceBeginAndSlog("StartRecoverySystemService");
        mSystemServiceManager.startService(RecoverySystemService.class);
        traceEnd();

        // 為啟動事件添加記錄
        RescueParty.noteBoot(mSystemContext);

        // 啟動 LightsService 管理LEDs 和背光顯示
        traceBeginAndSlog("StartLightsService");
        mSystemServiceManager.startService(LightsService.class);
        traceEnd();

        traceBeginAndSlog("StartSidekickService");
        // Package manager isn't started yet; need to use SysProp not hardware feature
        if (SystemProperties.getBoolean("config.enable_sidekick_graphics", false)) {
            mSystemServiceManager.startService(WEAR_SIDEKICK_SERVICE_CLASS);
        }
        traceEnd();

        // Display manager is needed to provide display metrics before package manager
        // starts up.
        traceBeginAndSlog("StartDisplayManager");
        mDisplayManagerService = mSystemServiceManager.startService(LightsService.class);
        traceEnd();

        // We need the default display before we can initialize the package manager.
        traceBeginAndSlog("WaitForDisplay");
        mSystemServiceManager.startBootPhase(SystemService.PHASE_WAIT_FOR_DEFAULT_DISPLAY);
        traceEnd();

        // Only run "core" apps if we're encrypting the device.
        String cryptState = SystemProperties.get("vold.decrypt");
        if (ENCRYPTING_STATE.equals(cryptState)) {
            Slog.w(TAG, "Detected encryption in progress - only parsing core apps");
            mOnlyCore = true;
        } else if (ENCRYPTED_STATE.equals(cryptState)) {
            Slog.w(TAG, "Device encrypted - only parsing core apps");
            mOnlyCore = true;
        }

        // 啟動 PackageManagerService
        if (!mRuntimeRestart) {
            MetricsLogger.histogram(null, "boot_package_manager_init_start",
                    (int) SystemClock.elapsedRealtime());
        }
        traceBeginAndSlog("StartPackageManagerService");
        mPackageManagerService = PackageManagerService.main(mSystemContext, installer,
                mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore);
        mFirstBoot = mPackageManagerService.isFirstBoot();
        mPackageManager = mSystemContext.getPackageManager();
        traceEnd();
        if (!mRuntimeRestart && !isFirstBootOrUpgrade()) {
            MetricsLogger.histogram(null, "boot_package_manager_init_ready",
                    (int) SystemClock.elapsedRealtime());
        }
        // Manages A/B OTA dexopting. This is a bootstrap service as we need it to rename
        // A/B artifacts after boot, before anything else might touch/need them.
        // Note: this isn't needed during decryption (we don't have /data anyways).
        if (!mOnlyCore) {
            boolean disableOtaDexopt = SystemProperties.getBoolean("config.disable_otadexopt",
                    false);
            if (!disableOtaDexopt) {
                traceBeginAndSlog("StartOtaDexOptService");
                try {
                    OtaDexoptService.main(mSystemContext, mPackageManagerService);
                } catch (Throwable e) {
                    reportWtf("starting OtaDexOptService", e);
                } finally {
                    traceEnd();
                }
            }
        }
        //啟動多用戶    UserManagerService
        traceBeginAndSlog("StartUserManagerService");
        mSystemServiceManager.startService(UserManagerService.LifeCycle.class);
        traceEnd();

        // 初始化屬性緩存
        traceBeginAndSlog("InitAttributerCache");
        AttributeCache.init(mSystemContext);
        traceEnd();

        // Set up the Application instance for the system process and get started.
        traceBeginAndSlog("SetSystemProcess");
        mActivityManagerService.setSystemProcess();
        traceEnd();

        // DisplayManagerService needs to setup android.display scheduling related policies
        // since setSystemProcess() would have overridden policies due to setProcessGroup
        mDisplayManagerService.setupSchedulerPolicies();

        /// M: CTA requirement - permission control  @{
        /*
         * M: MOTA for CTA permissions handling
         * This function is used for granting CTA permissions after OTA upgrade.
         * This should be placed after AMS is added to ServiceManager and before
         * starting other services since granting permissions needs AMS instance
         * to do permission checking.
         */
        mPackageManagerService.onAmsAddedtoServiceMgr();
        /// @}

        //  啟動 OverlayManagerService
        traceBeginAndSlog("StartOverlayManagerService");
        mSystemServiceManager.startService(new OverlayManagerService(mSystemContext, installer));
        traceEnd();

        // The sensor service needs access to package manager service, app ops
        // service, and permissions service, therefore we start it after them.
        // Start sensor service in a separate thread. Completion should be checked
        // before using it.
        mSensorServiceStart = SystemServerInitThreadPool.get().submit(() -> {
            TimingsTraceLog traceLog = new TimingsTraceLog(
                    SYSTEM_SERVER_TIMING_ASYNC_TAG, Trace.TRACE_TAG_SYSTEM_SERVER);
            traceLog.traceBegin(START_SENSOR_SERVICE);
            startSensorService();
            traceLog.traceEnd();
        }, START_SENSOR_SERVICE);
    }

七、SystemServer 的核心服務(wù)有哪些

1.SystemServer 核心服務(wù)

有?BatteryService 、UsageStatsService、WebViewUpdateService、BinderCallsStatsService4種核心服務(wù)。

Android SystemServer 啟動流程分析,android

SystemServer 4種核心服務(wù)

2.startCoreServices 代碼

/**
     * Starts some essential services that are not tangled up in the bootstrap process.
     */
    private void startCoreServices() {
        // 啟動 BatteryService 管理電池服務(wù)(電壓、電量、溫度)
        traceBeginAndSlog("StartBatteryService");
        // Tracks the battery level.  Requires LightService.
        mSystemServiceManager.startService(BatteryService.class);
        traceEnd();

        // 啟動 UsageStatsService 收集應(yīng)用持久化數(shù)據(jù)的服務(wù)
        traceBeginAndSlog("StartUsageService");
        mSystemServiceManager.startService(UsageStatsService.class);
        mActivityManagerService.setUsageStatsManager(
                LocalServices.getService(UsageStatsManagerInternal.class));
        traceEnd();

        // 啟動 WebViewUpdateService 監(jiān)視 WebView 是否更新
        if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_WEBVIEW)) {
            traceBeginAndSlog("StartWebViewUpdateService");
            mWebViewUpdateService = mSystemServiceManager.startService(WebViewUpdateService.class);
            traceEnd();
        }

        //啟動 CPU Binder 調(diào)度服務(wù)
        traceBeginAndSlog("StartBinderCallsStatsService");
        BinderCallsStatsService.start();
        traceEnd();
    }

八、SystemServer 的其他服務(wù)有哪些

1.startOtherServices 啟動的服務(wù)主要有:

KeyChainSystemService、TelecomLoaderService、AccountManagerService、ContentService、DropBoxManagerService、VibratorService、AlarmManagerService、Watchdog、 InputManagerService、WindowManagerService、IpConnectivityMetrics、NetworkWatchlistService、PinnerService等服務(wù)。

Android SystemServer 啟動流程分析,android

SystemServer 的其他服務(wù)

2.startOtherServices 代碼

/**
     * Starts a miscellaneous grab bag of stuff that has yet to be refactored
     * and organized.
     */
    private void startOtherServices() {
            ... ...

            
            traceBeginAndSlog("StartKeyAttestationApplicationIdProviderService");
            ServiceManager.addService("sec_key_att_app_id_provider",
                    new KeyAttestationApplicationIdProviderService(context));
            traceEnd();
            // 啟動 KeyChainSystemService 
            traceBeginAndSlog("StartKeyChainSystemService");
            mSystemServiceManager.startService(KeyChainSystemService.class);
            traceEnd();

            traceBeginAndSlog("StartSchedulingPolicyService");
            ServiceManager.addService("scheduling_policy", new SchedulingPolicyService());
            traceEnd();
            // 啟動 TelecomLoaderService  
            traceBeginAndSlog("StartTelecomLoaderService");
            mSystemServiceManager.startService(TelecomLoaderService.class);
            traceEnd();

            traceBeginAndSlog("StartTelephonyRegistry");
            telephonyRegistry = new TelephonyRegistry(context);
            ServiceManager.addService("telephony.registry", telephonyRegistry);
            traceEnd();

            traceBeginAndSlog("StartEntropyMixer");
            mEntropyMixer = new EntropyMixer(context);
            traceEnd();

            mContentResolver = context.getContentResolver();

            // 啟動 用戶管理服務(wù) ,必現(xiàn)在StartContentService 之前
            traceBeginAndSlog("StartAccountManagerService");
            mSystemServiceManager.startService(ACCOUNT_SERVICE_CLASS);
            traceEnd();
            // 啟動 ContentService
            traceBeginAndSlog("StartContentService");
            mSystemServiceManager.startService(CONTENT_SERVICE_CLASS);
            traceEnd();
            // 安裝系統(tǒng)Provider 例如 SettingProvider CantacttProvider
            traceBeginAndSlog("InstallSystemProviders");
            mActivityManagerService.installSystemProviders();
            // Now that SettingsProvider is ready, reactivate SQLiteCompatibilityWalFlags
            SQLiteCompatibilityWalFlags.reset();
            traceEnd();

            // 啟動 DropBoxManagerService  
            // 由于 依賴SettingsProvider,必須在InstallSystemProviders之后啟動
            traceBeginAndSlog("StartDropBoxManager");
            mSystemServiceManager.startService(DropBoxManagerService.class);
            traceEnd();
            //啟動 VibratorService 震動服務(wù)
            traceBeginAndSlog("StartVibratorService");
            vibrator = new VibratorService(context);
            ServiceManager.addService("vibrator", vibrator);
            traceEnd();

            if (!isWatch) {
                traceBeginAndSlog("StartConsumerIrService");
                consumerIr = new ConsumerIrService(context);
                ServiceManager.addService(Context.CONSUMER_IR_SERVICE, consumerIr);
                traceEnd();
            }
            // 啟動 AlarmManagerService
            traceBeginAndSlog("StartAlarmManagerService");
            if(!sMtkSystemServerIns.startMtkAlarmManagerService()){
                mSystemServiceManager.startService(AlarmManagerService.class);
            }
            traceEnd();
            // 初始化 看門狗
            traceBeginAndSlog("InitWatchdog");
            final Watchdog watchdog = Watchdog.getInstance();
            watchdog.init(context, mActivityManagerService);
            traceEnd();
            //啟動 InputManagerService
            traceBeginAndSlog("StartInputManagerService");
            inputManager = new InputManagerService(context);
            traceEnd();
            //啟動 WindowManagerService
            traceBeginAndSlog("StartWindowManagerService");
            // WMS needs sensor service ready
            ConcurrentUtils.waitForFutureNoInterrupt(mSensorServiceStart, START_SENSOR_SERVICE);
            mSensorServiceStart = null;
            wm = WindowManagerService.main(context, inputManager,
                    mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL,
                    !mFirstBoot, mOnlyCore, new PhoneWindowManager());
            ServiceManager.addService(Context.WINDOW_SERVICE, wm, /* allowIsolated= */ false,
                    DUMP_FLAG_PRIORITY_CRITICAL | DUMP_FLAG_PROTO);
            ServiceManager.addService(Context.INPUT_SERVICE, inputManager,
                    /* allowIsolated= */ false, DUMP_FLAG_PRIORITY_CRITICAL);
            traceEnd();

            traceBeginAndSlog("SetWindowManagerService");
            mActivityManagerService.setWindowManager(wm);
            traceEnd();

            traceBeginAndSlog("WindowManagerServiceOnInitReady");
            wm.onInitReady();
            traceEnd();

            // Start receiving calls from HIDL services. Start in in a separate thread
            // because it need to connect to SensorManager. This have to start
            // after START_SENSOR_SERVICE is done.
            SystemServerInitThreadPool.get().submit(() -> {
                TimingsTraceLog traceLog = new TimingsTraceLog(
                        SYSTEM_SERVER_TIMING_ASYNC_TAG, Trace.TRACE_TAG_SYSTEM_SERVER);
                traceLog.traceBegin(START_HIDL_SERVICES);
                startHidlServices();
                traceLog.traceEnd();
            }, START_HIDL_SERVICES);

            if (!isWatch) {
                traceBeginAndSlog("StartVrManagerService");
                mSystemServiceManager.startService(VrManagerService.class);
                traceEnd();
            }

            traceBeginAndSlog("StartInputManager");
            inputManager.setWindowManagerCallbacks(wm.getInputMonitor());
            inputManager.start();
            traceEnd();

            // TODO: Use service dependencies instead.
            traceBeginAndSlog("DisplayManagerWindowManagerAndInputReady");
            mDisplayManagerService.windowManagerAndInputReady();
            traceEnd();

            // Skip Bluetooth if we have an emulator kernel
            // TODO: Use a more reliable check to see if this product should
            // support Bluetooth - see bug 988521
            if (isEmulator) {
                Slog.i(TAG, "No Bluetooth Service (emulator)");
            } else if (mFactoryTestMode == FactoryTest.FACTORY_TEST_LOW_LEVEL) {
                Slog.i(TAG, "No Bluetooth Service (factory test)");
            } else if (!context.getPackageManager().hasSystemFeature
                       (PackageManager.FEATURE_BLUETOOTH)) {
                Slog.i(TAG, "No Bluetooth Service (Bluetooth Hardware Not Present)");
            } else {
                traceBeginAndSlog("StartBluetoothService");
                mSystemServiceManager.startService(BluetoothService.class);
                traceEnd();
            }
            // 啟動 IpConnectivityMetrics
            traceBeginAndSlog("IpConnectivityMetrics");
            mSystemServiceManager.startService(IpConnectivityMetrics.class);
            traceEnd();
            // 啟動 NetworkWatchlistService
            traceBeginAndSlog("NetworkWatchlistService");
            mSystemServiceManager.startService(NetworkWatchlistService.Lifecycle.class);
            traceEnd();
            // 啟動 PinnerService 
            traceBeginAndSlog("PinnerService");
            mSystemServiceManager.startService(PinnerService.class);
            traceEnd();
        } catch (RuntimeException e) {

參考文獻(xiàn):

【騰訊文檔】Android Framework 知識庫
https://docs.qq.com/doc/DSXBmSG9VbEROUXF5

友情推薦:

Android 開發(fā)干貨集錦

至此,本篇已結(jié)束。轉(zhuǎn)載網(wǎng)絡(luò)的文章,小編覺得很優(yōu)秀,歡迎點(diǎn)擊閱讀原文,支持原創(chuàng)作者,如有侵權(quán),懇請聯(lián)系小編刪除,歡迎您的建議與指正。同時期待您的關(guān)注,感謝您的閱讀,謝謝!

點(diǎn)擊閱讀原文,為大佬點(diǎn)贊!文章來源地址http://www.zghlxwxcb.cn/news/detail-545212.html

到了這里,關(guān)于Android SystemServer 啟動流程分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于Android13的系統(tǒng)啟動流程分析(三)之FirstStageMain階段

    基于Android13的系統(tǒng)啟動流程分析(三)之FirstStageMain階段

    Android13系統(tǒng)啟動階段大致分為FirstStageMain階段和SecondStageMain,此章主要講FirstStageMain階段 (若分析有誤敬請指教) 本章講解的方向和你將收獲的知識: 用戶空間進(jìn)程的調(diào)用流程 當(dāng)進(jìn)程掛掉后該如何處理 何時掛載上的基本文件系統(tǒng)和文件系統(tǒng)小知識 FirstStageMain階段會掛載上什

    2024年02月10日
    瀏覽(38)
  • 基于Android13的系統(tǒng)啟動流程分析(四)之SecondStageMain階段

    基于Android13的系統(tǒng)啟動流程分析(四)之SecondStageMain階段

    Android13系統(tǒng)啟動階段大致分為FirstStageMain階段和SecondStageMain,此章主要講SecondStageMain階段 (若分析有誤敬請指教) 在基于Android13的系統(tǒng)啟動流程分析(三)之FirstStageMain階段已經(jīng)講解過android系統(tǒng)啟動的基本介紹了,這里不再單獨(dú)介紹了 我們先看是怎么進(jìn)入該階段的,仍然是

    2023年04月24日
    瀏覽(29)
  • 基于Android13的系統(tǒng)啟動流程分析(一)之SeLinux權(quán)限介紹

    基于Android13的系統(tǒng)啟動流程分析(一)之SeLinux權(quán)限介紹

    學(xué)習(xí)Android系統(tǒng)啟動流程之前先學(xué)習(xí)一下SeLinux權(quán)限系統(tǒng),步入正題 本章講解的方向和你將收獲的知識: 什么是SeLinux系統(tǒng),SeLinux的簡介和介紹 SeLinux系統(tǒng)的主要作用和存在的意義,是基于哪個版本開始推行該方案的 如果遇到了SeLinux權(quán)限問題該如何解決,有幾種解決方案 SeLi

    2024年02月04日
    瀏覽(44)
  • Android Framework 之 SystemServer

    SystemServer是Android系統(tǒng)中的一個核心組件,負(fù)責(zé)啟動和管理許多重要的系統(tǒng)服務(wù)。它的啟動過程相對復(fù)雜,包含以下主要步驟: Zygote啟動SystemServer :在Android系統(tǒng)啟動過程中,Zygote進(jìn)程會通過fork操作創(chuàng)建一個新的進(jìn)程,并在這個新的進(jìn)程中啟動SystemServer。 加載并執(zhí)行SystemSer

    2024年02月14日
    瀏覽(21)
  • Android Activity的啟動流程(Android-10)

    Android Activity的啟動流程(Android-10)

    在Android開發(fā)中,我們經(jīng)常會用到startActivity(Intent)方法,但是你知道startActivity(Intent)后Activity的啟動流程嗎?今天就專門講一下最基礎(chǔ)的startActivity(Intent)看一下Activity的啟動流程,同時由于Launcher的啟動后續(xù)和這里基本類似,就記錄在一起。注意本章都是基于Android-10來講解的。

    2024年01月17日
    瀏覽(21)
  • android源碼學(xué)習(xí)- APP啟動流程(android12源碼)

    android源碼學(xué)習(xí)- APP啟動流程(android12源碼)

    百度一搜能找到很多講APP啟動流程的,但是往往要么就是太老舊(還是基于android6去分析的),要么就是不全(往往只講了整個流程的一小部分)。所以我結(jié)合網(wǎng)上現(xiàn)有的文章,以及源碼的閱讀和調(diào)試,耗費(fèi)了3整天的時間,力求寫出一篇最完整,最詳細(xì),最通俗易懂的文章,

    2024年02月11日
    瀏覽(21)
  • Android啟動流程優(yōu)化 中篇

    本文鏈接:https://blog.csdn.net/feather_wch/article/details/131587046 1、我們可以優(yōu)化部分 Application構(gòu)建到主界面onWindowFocusChanged 2、啟動方式(官方) 冷啟動 熱啟動 溫啟動 3、怎么樣算是卡頓? 卡頓:2-5-8原則 2秒以內(nèi):流程 2-5秒:可以接受 5-8秒:有些卡頓 8秒以上:非??D,沒辦法接

    2024年02月12日
    瀏覽(37)
  • Android系統(tǒng)啟動流程概覽

    Boot Rom —— Bootloader —— Linux Kernel —— init進(jìn)程 —— Zygote進(jìn)程(dalvik/ art)—— systemServer —— Apps init 進(jìn)程是Linux系統(tǒng)中,用戶空間啟動的第一個進(jìn)程。 創(chuàng)建并掛載一些文件目錄 啟動屬性服務(wù) 解析 init.rc 配置文件,啟動 Zygote 進(jìn)程 掛載 seLinux 文件目錄,創(chuàng)建seLinux,加載

    2024年02月06日
    瀏覽(22)
  • Android:啟動流程

    Android:啟動流程

    第一步:啟動電源以及系統(tǒng)啟動 當(dāng)電源按下,引導(dǎo)芯片代碼開始從預(yù)定義的地方(固化在ROM)開始執(zhí)行。加載引導(dǎo)程序到RAM,然后 執(zhí)行 第二步:引導(dǎo)程序 引導(dǎo)程序是在Android操作系統(tǒng)開始運(yùn)行前的一個小程序。引導(dǎo)程序是運(yùn)行的第一個程序,因此它是針 對特定的主板與芯片的

    2023年04月16日
    瀏覽(24)
  • Android Framework 之 啟動流程

    Android 系統(tǒng)的啟動流程 Android 系統(tǒng)的啟動流程可以分為以下幾個主要步驟: 引導(dǎo)加載器(Bootloader)啟動 :當(dāng)你打開一個 Android 設(shè)備時,首先啟動的是引導(dǎo)加載器。引導(dǎo)加載器負(fù)責(zé)啟動 Android 的核心操作系統(tǒng)。 Linux 內(nèi)核啟動 :引導(dǎo)加載器加載并啟動 Linux 內(nèi)核。Linux 內(nèi)核負(fù)責(zé)

    2024年02月14日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包