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