Android系統的啟動優化


Android系統的啟動優化

1. 優化preload的classes和resource

  由於所有的Android應用程序都是從Zygote進程fork出來的,所以為了共享一些class和resourse資源,Zygote進程初始化過程中,會預先加載一些常用的java class和資源文件到進程的內存中,這樣其他應用fork出來后就不用再次加載了,從而提高了應用的啟動速度。

//資源和類並行加載

static void preload() {
  Thread preloadRsThread = new Thread(new Runnable(){
    @Override
    public void run() {
      //將該資源加載放在子線程中,加載資源文件要比加載classes文件要快,因此這里不提升子線程優先級。
      preloadResources();
      }
  }) ;
  preloadRsThread.start() ;
  preloadClasses();
  try {
    preloadRsThread.join() ;
  } catch (InterruptedException e) {
    e.printStackTrace();

  }
}

// 提升進程的優先級    ZygoteInit.java入口
    public static void main(String argv[]) {
        try { 
            //獲取當前進程優先級
            int currentPriority = Process.getThreadPriority(Process.myPid()) ;
            //提升當前進程優先級。
            Process.setThreadPriority(Process.THREAD_PRIORITY_AUDIO) ;
            // Start profiling the zygote initialization.
            SamplingProfilerIntegration.start(); 
            registerZygoteSocket();
            EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_START,
                SystemClock.uptimeMillis());
            //5.加載資源
            preload();
            EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_END,
                SystemClock.uptimeMillis());
            SamplingProfilerIntegration.writeZygoteSnapshot();
            Process.setThreadPriority(currentPriority) ;
}

2.  精簡native service和java service

  Android OS的啟動本質上就是啟動一系列的本地服務和Java服務,Android系統的所有功能都是通過這些服務間接提供的。這些服務有很多並不是必須啟動的,根據業務需求可以去掉一些,涉及到的文件:

  system/core/rootdir/init.rc

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

3.  精簡預裝的apk文件

  系統啟動過程中,會掃描系統指定目錄下的所有apk文件,這個過程也是非常耗時的,預裝的apk文件越少,系統啟動速度也就越快,因此,精簡預裝apk也是優化系統啟動速度最重要的手段之一。要想減少預裝的apk文件,則需要分析系統的build文件,將不需要的apk編譯選項刪除掉,涉及到的文件:

   build/target/product/xxxx.mk

   device/<company>/<product>/xxxx.mk

   vendor/..../xxxx.mk

4.  減少內核的log打印級別

  過多的log打印消息會顯著地增加系統啟動的時間,log打印級別有多處可以調整,推薦修改init.rc文件中的loglevel來改變log打印級別。

  涉及到的文件:system/core/rootdir/init.rc

on property:sys.init_log_level=*
    loglevel ${sys.init_log_level}

5.  其他優化手段

  上面介紹的都是最常用的優化手段,其實還有很多其他的方法,簡單列舉如下:

(1) 優化啟動動畫,降低幀率和圖片尺寸

(2) 精簡系統,減小boot.img文件大小,可以顯著減少啟動過程中加載和解壓boot.img的時間

(3) 預先創建一些目錄和文件,而不是在init過程中創建


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM