1. 程式人生 > >android 5.1.1開機優化(framework層)

android 5.1.1開機優化(framework層)

android原生系統中對於開機這一塊並未做深度的優化,由於領域的限制,這裡僅僅對framework中的一部分優化提出來說一下。

其實,這篇部落格是對之前的一篇部落格的整合,之前寫的比較亂。

一、涉及到的類檔案

./base/core/java/com/android/internal/os/ZygoteInit.java

二、具體修改

主要的思路是載入class檔案和resource檔案比較多,耗時也多,因此主要從這裡開刀。

1)提升process的優先順序

 public static void main(String argv[]) {
        try {
            ......
			
			/*  20151013 optimize android boot begin */
			//get the default priority.
			int defaultPriority = Process.getThreadPriority(Process.myPid()) ;
			//increase the priority .
			Process.setThreadPriority(Process.THREAD_PRIORITY_AUDIO) ;
			
            registerZygoteSocket(socketName);
            EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_START,
                SystemClock.uptimeMillis());
            preload();
            EventLog.writeEvent(LOG_BOOT_PROGRESS_PRELOAD_END,
                SystemClock.uptimeMillis());

            // Finish profiling the zygote initialization.
            SamplingProfilerIntegration.writeZygoteSnapshot();

            // Do an initial gc to clean up after startup
            gc();

			Process.setThreadPriority(defaultPriority) ;
			/*  20151013 optimize android boot end */
            ......
        } catch (MethodAndArgsCaller caller) {
            caller.run();
        } catch (RuntimeException ex) {
            Log.e(TAG, "Zygote died with exception", ex);
            closeServerSocket();
            throw ex;
        }
    }

2)
    static void preload() {
        Log.d(TAG, "begin preload");
        preloadClasses();
		/*  20151013 optimize android boot begin */
		Thread resThread = new Thread(new Runnable() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				// preload resource .
				long startTime = SystemClock.uptimeMillis() ;
				preloadResources();

				Log.i(":ZygoteInit","preloadResources' time :" + (SystemClock.uptimeMillis()-startTime) + "ms.") ;
			}
		}) ;
		resThread.start();

		try {
			resThread.join();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		/*  20151013 optimize android boot end */
        preloadOpenGL();
        ......
    }

3)

    /**
     * Performs Zygote process initialization. Loads and initializes
     * commonly used classes.
     *
     * Most classes only cause a few hundred bytes to be allocated, but
     * a few will allocate a dozen Kbytes (in one case, 500+K).
     */
    private static void preloadClasses() {
	
                    ......
					
                    Class.forName(line);
					/*  20151013 optimize android boot begin */
                    if (count%128==0 && Debug.getGlobalAllocSize() > PRELOAD_GC_THRESHOLD) {
                        if (false) {
                            Log.v(TAG,
                                " GC at " + Debug.getGlobalAllocSize());
                        }
                        System.gc();
                        runtime.runFinalizationSync();
                        Debug.resetGlobalAllocSize();
                    }
					/*  20151013 optimize android boot end */
                    count++;
                } 
				......
    }

	/*  20151013 optimize android boot begin */
    /** when preloading, GC after allocating this many bytes */
    //private static final int PRELOAD_GC_THRESHOLD = 50000;
    private static final int PRELOAD_GC_THRESHOLD = 64 * 1024 * 1024;
	/*  20151013 optimize android boot end */


其實,可以做的工作還可以有很多,不僅僅是這一點......

相關推薦

android 5.1.1開機優化(framework)

android原生系統中對於開機這一塊並未做深度的優化,由於領域的限制,這裡僅僅對framework中的一部分優化提出來說一下。 其實,這篇部落格是對之前的一篇部落格的整合,之前寫的比較亂。 一、涉及到的類檔案 ./base/core/java/com/android/

Android 5.1 Settings源代碼簡要分析

lang oid inpu mini tty 之前 arch 概述 wro 轉載請註明出處,謝謝~http://blog.csdn.net/u011974987/article/details/51004854。 概述: 先聲明:本人工作快兩

Android第五十四期 - 超級巨圖Glide3.7和Glide4.1.1優化加載方案全網首發

test本文出自 “梁肖技術中心” 博客,請務必保留此出處http://liangxiao.blog.51cto.com/3626612/1966795Android第五十四期 - 超級巨圖Glide3.7和Glide4.1.1優化加載方案全網首發

RK3288 Android 5.1 韌體 編譯

官網連結:http://wiki.t-firefly.com/zh_CN/Firefly-RK3288/compile_android.html   以下內容為原文轉載+部分修改   編譯 Android 5.1 韌體 準備工作 編譯 Android 對機

Android 5.1 建立多級資料夾失敗之奇怪的問題

問題: Android 5.1 建立多級資料夾失敗之奇怪的問題 原始碼: /** * 判斷資料夾是否建立 */ private static String foundFolder(String... str){ int length = str.length; String

網易雲音樂 2.5.1(196734) 精簡優化

軟體庫歡迎您的光臨,本站免費收集網際網路精品實用綠色軟體,我們的宗旨:免費、實用、綠色、安全 ! 網易雲音樂(CloudMusic) 是一款專注於發現與分享的PC客戶端音樂產品,擁有龐大的音樂資源庫,囊括百萬首320Kbps高品質音樂,登入後你可以關注明星、DJ和好友,通過瀏覽他們的動態、收藏和

Android 5.1 乙太網服務啟動過程

1.SystemServer簡介 Android系統中的好多功能能夠執行起來,在程式碼層面好多都是以服務的方式實現的。而幾乎所有的服務都是在SystemServer中建立的。SystemServer作為Android系統的一個核心程序,它是在zygote程序中孕育出來的。 那麼zygo

android 5.1預置apk

作為一個菜鳥,前一段時間在工作中按照前輩的方法比葫蘆畫瓢的去預置apk.自己並不明白,前輩們為什麼會這麼做?這麼做的意義是什麼?這種預置方法有什麼好處?今天看了一下資料,明白其中涉及到的4中預置apk的方法和這麼預置的意義所在。於是,就向廣大童鞋分享一下~~~~   一、如何將帶原始碼

[Android] “作業系統升級中, 正在優化1個應用"

解決方案:   將/system/framework/下     com.google.widevine.software.drm.jar     com.google.widevine.software.drm.odex刪掉 步驟:

spring-framework-reference(5.1.1.RELEASE)中文版——Core部分

前言 最近在學習Spring框架,在學習的同時,藉助有道翻譯,整理翻譯了部分文件,由於尚在學習當中,所以該篇文章將會定時更新,目標在一個月左右時間翻譯完全部版本。 雖然大部分內容為翻譯,但是其中可能會新增一些我對Spring的理解,最近也在計劃建立一個wiki版本,希望同樣在學習的你,可以參與進來,我們共同完

Android 5.1 wifi 密碼掉電後丟失解決

Android 5.1 直接掉電wifi密碼解決: 1.一旦wifi連線後,將密碼備份 2.在開機的時候將備份密碼覆蓋wpa_supplicant.conf檔案即可 具體實現如下 package com.android.server.wifi; import java.io.Fi

Android 5.1修改SystemUi導航欄背景顏色

現在很多手機都是用虛擬按鍵了,但是很多手機的虛擬按鍵的導航欄背景顏色是黑色的,看起來其醜無比啊,比如華為; 要想看上去協調一些,當然是改成透明的啦,怎麼改呢?按照以往的思路,當然是直接改佈局檔案就可以了的,想想這個思路也沒錯,佈局檔案位於 frameworks/base/packages/S

Android 5.1.1 原始碼目錄結構說明

Android 5.1.1 |-- bootable (啟動引導相關程式碼) |-- Makefile |-- abi (applicationbinary interface,應用程式二進位制介面,生成libgabi++.so相關庫檔案) |-- art (google在4.4後

android4.2.2---1. halframework的呼叫

1.HAL層首先在hal層定義結構體sensors_module_t#define SENSORS

Android 5.1原始碼編譯環境搭建

      根據官方及網路上的教程,成功搭建了Android 5.1原始碼的編譯環境併成功編譯。過程如下: 一: 使用虛擬機器,安裝ubuntu。 ubuntu-14.04.5-desktop-amd

Android 5.1 長按power鍵流程分析

private GlobalActionsDialog createDialog() { // Simple toggle style if there's no vibrator, otherwise use a tri-state if (!mHasVibrator

android 7.1系統語言設定和5.1.1不同

//7.1參考 \frameworks\base\core\java\com\android\internal\app\LocalePicker.javapublic static void updateLocale(Locale locale) {updateLocales

RK3288 平臺(Android 5.1)+ PN548 除錯流水賬(一、前期編譯篇)

一、獲取原始碼 客戶向瑞芯微技術視窗申請SDK 二、SDK 編譯 1.JDK 安裝 Android5.1 系統編譯依賴於 JDK7。 編譯之前需安裝 JDK7,並配置 JAVA 環境變數。例如, 安裝路徑為/usr/lib/jvm/java

Android 5.1 AppOps總結

什麼是AppOps Android App在AndroidManifest.xml中申請了很多執行時需要獲取的許可權,例如 <uses-permission android:name="android.permission.NF

RK3288編譯 Android 5.1 韌體

1 準備工作編譯 Android 對機器的配置要求較高:64 位 CPU16GB 實體記憶體+交換記憶體30GB 空閒的磁碟空間用於構建,原始碼樹另外佔用大約 25GB安裝 OpenJDK 7:   sudo apt-get install openjdk-7-jdk提示:安裝 openjdk-7-jdk,會