出版時間:2012-10 出版社:人民郵電出版社 作者:[法] Hervé Guihot 頁數(shù):226 字數(shù):355000 譯者:白龍
Tag標簽:無
前言
Android已經(jīng)融入了尋常百姓的生活中。當今世界,手機正從功能時代進化到智能時代,同時又誕生了令人愛不釋手的平板電腦。目前,應(yīng)用程序開發(fā)者的可選擇平臺主要就是Android和iOS。Android降低了甚至可以說是打破了移動開發(fā)的門檻,應(yīng)用程序開發(fā)者編寫Android應(yīng)用程序只需要一臺計算機就夠了(當然還要有一些編程知識)。工具都是免費的,幾乎每個人都能寫出數(shù)百萬人會用的應(yīng)用。Android可以運行在各種設(shè)備上,從平板到電視。開發(fā)者關(guān)鍵要做的就是保證應(yīng)用可以順利地在這些設(shè)備上運行,而且比競爭對手的還好。對應(yīng)用程序開發(fā)人員而言,Android開發(fā)的門檻已經(jīng)很低了,你會發(fā)現(xiàn),在許多情況下,自己不過是想要在日益增長的Android應(yīng)用程序市場上分一杯羹而已。賴以謀生、實現(xiàn)明星夢,或者只是想使世界變得更美好……無論你編寫程序所為何求,性能問題都是其中的關(guān)鍵。要想閱讀本書,最好能事先對Android應(yīng)用程序開發(fā)基礎(chǔ)有所了解,由此方能利用本書的妙訣良方讓程序跑得更快。盡管借助Android工具和在線文檔可以很容易地創(chuàng)建應(yīng)用程序,但性能優(yōu)化(有時簡直更像是一門藝術(shù)而不是科學)卻無定法可循。不管要優(yōu)化的程序是已有的,還是從頭編寫的。本書的目的就是要幫你找到簡便的優(yōu)化方法,以便使程序在幾乎所有Android設(shè)備上都能取得不錯的性能。Android允許開發(fā)人員使用Java、C/C++,甚至匯編語言,所以,無論是更好地利用CPU特性,還是針對特定問題使用合適的編程語言,相信你可以用多種不同的方法來優(yōu)化性能。第1章 優(yōu)化Java代碼。毫無疑問,你的第一個Android應(yīng)用程序基本都是用Java開發(fā)的。在這一章,你會了解到,選擇算法要比實現(xiàn)算法更重要。你還將學習如何利用簡單的技術(shù)(如緩存和減少內(nèi)存分配)來極大地優(yōu)化應(yīng)用程序。此外,你還將學習讓應(yīng)用程序隨時能夠保持響應(yīng)的方法,這是一個非常重要的性能指標。此外還將介紹高效使用數(shù)據(jù)庫的方法。第2章 更進一步(或者說更底層,得看談話對象)領(lǐng)略Android NDK。盡管自從Android 2.2以后Java代碼可以即時編譯為機器碼,但某些方法用C代碼實現(xiàn)可以獲得更棒的結(jié)果。NDK還可以讓你輕松地將現(xiàn)有代碼移植到Android,而無需用Java重寫一遍。第3章 底層的匯編語言。大多數(shù)應(yīng)用程序開發(fā)很少用到匯編語言,但匯編語言能充分利用各個平臺的專有指令集。雖然這會增加復(fù)雜度和維護成本,但卻是非常強大的優(yōu)化秘訣。匯編代碼通常僅限于應(yīng)用程序的某些特定部分,但不應(yīng)忽略它的優(yōu)點,仔細而有針對性的優(yōu)化可以取得巨大成效。第4章 探討如何使用更少的內(nèi)存來提高性能。除了學習在代碼中使用較少內(nèi)存的簡單方法,你還將了解到,由于CPU的設(shè)計方式,內(nèi)存分配方式和內(nèi)存訪問也會對性能有直接影響。第5章 如何在Android應(yīng)用程序中使用多線程,以便保持隨時響應(yīng),為越來越多可以同時運行多線程的Android設(shè)備提升性能。第6章 測量應(yīng)用程序性能的基礎(chǔ)知識。除了可以用API來測量時間外,一些Android工具還可以方便地查看應(yīng)用程序執(zhí)行時間耗費的具體情況。第7章 確保應(yīng)用程序合理使用電量的一些方法。許多Android設(shè)備都由電池供電,因而節(jié)電非常重要,沒人愿意使用過于耗電的應(yīng)用。通過本章所述方法,可以不必犧牲Android程序的特性就能最大限度地減少功耗。第8章 一些完善應(yīng)用程序布局和優(yōu)化OpenGL渲染的基本技術(shù)。第9章 RenderScript。它是Honeycomb引入的一個相對較新的Android組件。RenderScript為性能而生,從首次發(fā)布以來已經(jīng)有不少改進。本章介紹如何在應(yīng)用程序中使用RenderScript,順便學習RenderScript定義的許多API。我希望你喜歡上這本書,并在里面找到許多有用的技巧。你會發(fā)現(xiàn),很多技術(shù)不獨適用于Android,還可以用在很多其他平臺上,例如iOS。就個人而言,我偏好匯編語言,希望能借著Android平臺的快速發(fā)展以及其對NDK匯編語言的支持,能使Android吸引到更多的開發(fā)者。至少,他們可以學到一門新技術(shù)。但是,良好的設(shè)計和算法常??梢詽M足所有性能優(yōu)化的需求,這才是關(guān)鍵。祝你好運,我期待著你的Android應(yīng)用程序!
內(nèi)容概要
《Android應(yīng)用性能優(yōu)化》主要介紹如何調(diào)優(yōu)Android應(yīng)用,以使應(yīng)用更健壯并提高其執(zhí)行速度。內(nèi)容包括用Java、NDK優(yōu)化應(yīng)用,充分利用內(nèi)存以使性能最大化,盡最大可能節(jié)省電量,何時及如何使用多線程,如何使用基準問題測試代碼,如何優(yōu)化OpenGL代碼和使用Renderscript等?!禔ndroid應(yīng)用性能優(yōu)化》面向熟悉Java和Android
SDK的想要進一步學習如何用本地代碼優(yōu)化應(yīng)用性能的Android開發(fā)人員。
作者簡介
Hervé Guihot
目前在聯(lián)發(fā)科技公司(MTK,www,mediatek.com)擔任軟件工程經(jīng)理。他有十多年的嵌入式系統(tǒng)開發(fā)工作經(jīng)驗,主要與數(shù)字電視技術(shù)相關(guān)。目前正在研究如何將Android引入基于ARM的數(shù)字家庭平臺。
書籍目錄
第1章 Java代碼優(yōu)化
1.1 Android如何執(zhí)行代碼
1.2 優(yōu)化斐波納契數(shù)列
1.2.1 從遞歸到迭代
1.2.2 BigInteger
1.3 緩存結(jié)果
1.4 API等級
1.5 數(shù)據(jù)結(jié)構(gòu)
1.6 響應(yīng)能力
1.6.1 推遲初始化
1.6.2 StrictMode
1.7 SQLite
1.7.1 SQLite語句
1.7.2 事務(wù)
1.7.3 查詢
1.8 總結(jié)
第2章 NDK入門
2.1 NDK里有什么
2.2 混合使用Java和C/C++代碼
2.2.1 聲明本地方法
2.2.2 實現(xiàn)JNI粘合層
2.2.3 創(chuàng)建Makefile
2.2.4 實現(xiàn)本地函數(shù)
2.2.5 編譯本地庫
2.2.6 加載本地庫
2.3 Application.mk
2.3.1 為(幾乎)所有設(shè)備優(yōu)化
2.3.2 支持所有設(shè)備
2.4 Android.mk
2.5 使用C/C++改進性能
2.6 本地Acitivity
2.6.1 構(gòu)建缺失的庫
2.6.2 替代方案
2.7 總結(jié)
第3章 NDK進階
3.1 匯編
3.1.1 最大公約數(shù)
3.1.2 色彩轉(zhuǎn)換
3.1.3 并行計算平均值
3.1.4 ARM指令
3.1.5 ARM NEON
3.1.6 CPU特性
3.2 C擴展
3.2.1 內(nèi)置函數(shù)
3.2.2 向量指令
3.3 技巧
3.3.1 內(nèi)聯(lián)函數(shù)
3.3.2 循環(huán)展開
3.3.3 內(nèi)存預(yù)讀取
3.3.4 用LDM/STM替換LDR/STD
3.4 總結(jié)
第4章 高效使用內(nèi)存
4.1 說說內(nèi)存
4.2 數(shù)據(jù)類型
4.2.1 值的比較
4.2.2 其他算法
4.2.3 數(shù)組排序
4.2.4 定義自己的類
4.3 訪問內(nèi)存
4.4 排布數(shù)據(jù)
4.5 垃圾收集
4.5.1 內(nèi)存泄漏
4.5.2 引用
4.6 API
4.7 內(nèi)存少的時候
4.8 總結(jié)
第5章 多線程和同步
5.1 線程
5.2 AsyncTask
5.3 Handler和Looper
5.3.1 Handler
5.3.2 Looper
5.4 數(shù)據(jù)類型
5.5 并發(fā)
5.6 多核
5.6.1 為多核修改算法
5.6.2 使用并發(fā)緩存
5.7 Activity生命周期
5.7.1 傳遞信息
5.7.2 記住狀態(tài)
5.8 總結(jié)
第6章 性能評測和剖析
6.1 時間測量
6.1.1 System.nanoTime()
6.1.2 Debug.threadCpuTimeNanos()
6.2 方法調(diào)用跟蹤
6.2.1 Debug.startMethodTracing()
6.2.2 使用Traceview工具
6.2.3 DDMS中的Traceview
6.2.4 本地方法跟蹤
6.3 日志
6.4 總結(jié)
第7章 延長電池續(xù)航時間
7.1 電池
7.2 禁用廣播接收器
7.3 網(wǎng)絡(luò)
7.3.1 后臺數(shù)據(jù)
7.3.2 數(shù)據(jù)傳輸
7.4 位置
7.4.1 注銷監(jiān)聽器
7.4.2 更新頻率
7.4.3 多種位置服務(wù)
7.4.4 篩選定位服務(wù)
7.4.5 最后已知位置
7.5 傳感器
7.6 圖形
7.7 提醒
7.8 WakeLock
7.9 總結(jié)
第8章 圖形
8.1 布局優(yōu)化
8.1.1 相對布局
8.1.2 合并布局
8.1.3 重用布局
8.1.4 ViewStub
8.2 布局工具
8.2.1 層級視圖
8.2.2 layoutopt
8.3 OpenGL ES
8.3.1 擴展
8.3.2 紋理壓縮
8.3.3 Mipmap
8.3.4 多APK
8.3.5 著色
8.3.6 場景復(fù)雜性
8.3.7 消隱
8.3.8 渲染模式
8.3.9 功耗管理
8.4 總結(jié)
第9章 RenderScript
9.1 概覽
9.2 Hello World
9.3 Hello Rendering
9.3.1 創(chuàng)建渲染腳本
9.3.2 創(chuàng)建RenderScriptGL Context
9.3.3 展開RSSurfaceView
9.3.4 設(shè)置內(nèi)容視圖
9.4 在腳本中添加變量
9.5 HelloCompute
9.5.1 Allocation
9.5.2 rsForEach
9.5.3 性能
9.6 自帶的RenderScript API
9.6.1 rs_types.rsh
9.6.2 rs_core.rsh
9.6.3 rs_cl.rsh
9.6.4 rs_math.rsh
9.6.5 rs_graphics.rsh
9.6.6 rs_time.rsh
9.6.7 rs_atomic.rsh
9.7 RenderScript與NDK對比
9.8 總結(jié)
章節(jié)摘錄
版權(quán)頁: 插圖: Android Market可以讓應(yīng)用發(fā)布多個APK,每個針對不同的配置。例如,可以讓一個APK只使用ETC1紋理,另一個用PVRTC紋理——即為使用PowervR的Android設(shè)備優(yōu)化。這些APK共享相同的AndroidMarket列表,AndroidMarket會為每個設(shè)備仔細選擇適合的APK。用戶不必擔心下載并安裝的APK是否正確,這一切是自動和透明的。 注意并非所有的Android應(yīng)用商店都支持此功能,所以如果你打算分發(fā)應(yīng)用到多個商店,還是盡可能用適合所有設(shè)備的單一APK吧。 當然,紋理可能不是你需要發(fā)布多個APK的唯一原因。例如,你可能針對舊設(shè)備發(fā)布小的APK,對較新的設(shè)備發(fā)布帶有更多功能且更大的APK。雖然可以使用多個APK,但它會使發(fā)布流程和維護變得復(fù)雜,因此,建議你盡可能嘗試發(fā)布單一APK。 8.3.5著色 OpenGL Es 2.o支持OpenGL Es著色語言(shadillg Language),以取代OpenGL ES 1.x中的固定變換函數(shù)和分散的管線(pipeline)。這種語言基于C,可以讓你編寫自己的頂點(venex)和片段(fragment)著色來控制OpenGL管線。 像C程序一樣,著色器可以非常簡單,也可極其復(fù)雜。雖然沒有必須遵循的單一規(guī)則,但你應(yīng)該盡可能減少著色器的復(fù)雜性,這會非常影響性能。 8.3.6場景復(fù)雜性 顯然,渲染復(fù)雜的場景比簡單的要花的時間長。一個提高幀速率的方法是簡化要渲染的場景,同時保持可接受的視覺質(zhì)量。例如,對于可看到的紋理,較遠的物體可以減少細節(jié),使用更少的三角形。簡單的對象使用的內(nèi)存和帶寬較少。 8.3.7 消隱 盡管GPU擅長幾何運算,并能確定要渲染的物體,但應(yīng)用應(yīng)該盡力消隱(Culling)視線以外的物體,這樣就不會向那些因為不可見而要丟棄的對象發(fā)送繪制命令。 消隱對象(甚至三角形)有許多方法,這些已超出本書的范圍,幀速率低于預(yù)期可能是考慮不周的消隱方法造成的。例如,可以快速消除攝像機(camera)后面的物體。 注意大多情況下你可以啟用背面消隱(Backface Culling),這將不會渲染對象背面的三角形。
媒體關(guān)注與評論
“本書詳細介紹了優(yōu)化Android代碼的各種規(guī)則和技巧,揭開了Android和JAVA核心數(shù)據(jù)結(jié)構(gòu)的神秘面紗。最值得稱道的是,作者展示了使用緩存、SQLite以及延長電池使用壽命的技術(shù),這是每個嚴謹?shù)拈_發(fā)人員都必須要掌握的內(nèi)容?!薄W(wǎng)友評論“市面上這種書并不多見!我想把這本書推薦給所有Android高級程序員?!薄W(wǎng)友評論
編輯推薦
Android應(yīng)用開發(fā)者經(jīng)常要想盡辦法來提升程序性能。Herve Guihot專著的《Android應(yīng)用性能優(yōu)化》主要介紹如何快速高效地優(yōu)化應(yīng)用,讓應(yīng)用變得穩(wěn)定高效。你將學會利用Android SDK和NDK來混合或單獨使用Java、C/C++來開發(fā)應(yīng)用。 把Herve Guihot專著的《Android應(yīng)用性能優(yōu)化》的內(nèi)容學以致用,你的編程技術(shù)就會得到關(guān)鍵性的提升,寫出的應(yīng)用就會更為健壯高效,從而廣受用戶好評,并最終獲得成功。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載
Android應(yīng)用性能優(yōu)化 PDF格式下載