zoukankan      html  css  js  c++  java
  • 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过程中创建

  • 相关阅读:
    python值解析excel
    python 面向对象
    python之解析json
    python之数据驱动ddt
    Matlab笔记
    WPF应用Access数据库
    白平衡之灰度世界法与镜面法
    应用按位与操作,拆分字节
    WPF(C#)与MATLAB混合编程
    C++调用matlab函数
  • 原文地址:https://www.cnblogs.com/lufeibin/p/13517343.html
Copyright © 2011-2022 走看看