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. hal層與framework層的呼叫
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,會