Android高性能編程

Android高性能編程

廣泛覆蓋了開發最優App所涉及的各種話題;深度探索本地編碼;對於那些拒絕性能故障及粗放型資源利用的專業級Android開發人員的必備書目。

【西班牙】Enrique López Mañas(恩里克·洛佩斯·馬尼亞斯),【意】Diego Grancini (迪戈·格蘭奇尼)著

葉坤 譯

ISBN 978-7-121-32887-9

2018年1月出版

定價:99.00元

400頁

16開

內容提要

《Android高性能編程》旨在為Android 開發者指明提高應用程式性能的方向。第1 章就什麼是高性能、為什麼需要高性能展開討論。第2 章為讀者展示了一些用於調試應用程式的工具、方案以及技巧。第3~8 章圍繞著布局、記憶體、多執行緒、網路、安全、電量消耗等多個方面,闡述如何打造高性能應用程式。第9 章相對獨立,介紹的是原生開發。第10 章與前面章節的關係也不大,涵蓋了一些瑣碎但對性能至關重要的小技巧,例如,圖像處理、序列化、最佳化APK 檔案,等等。

《Android高性能編程》面向具有一定Android 開發經驗,希望得到進一步提升的工程師。

目錄

1 引言:為什麼需要高性能?

為什麼應用程式的性能意味著這么多?

手動測試和自動測試

ANR和軟體中的延遲

什麼會觸發ANR,我該如何避免它們?

Android架構

Dalvik虛擬機

記憶體管理

電量消耗

Java語言

NDK/在需要時進行原生開發

程式回響相關的3個臨界值

軟體質量的商業價值

總結

2 高效調試

ADB

DDMS

採集和分析執行緒信息

堆分析和可視化

Allocation Tracker

網路使用

Emulator Control

系統狀態

調試UI

使用Hierarchy Viewer

Systrace

Android設備調試選項

Android即時運行

GPU分析器

使用GPU分析器進行調試

ClassyShark

開始使用

總結

3 打造布局

預覽

渲染性能

螢幕撕裂和垂直同步

多視窗模式

最佳實踐

布局概述

布局層次管理

布局復用

ViewStub

AdapterView和視圖回收

自定義視圖和布局

螢幕縮放

調試工具

Design視窗

Hierarchy Viewer

設備上的調試工具

Systrace

總結

4 記憶體

預覽

記憶體如何工作

垃圾回收

記憶體共享

運行時

Android N 即時編譯器

記憶體泄露

記憶體抖動

引用

記憶體相關的項目

最佳實踐

數據類型

語法

常量

對象管理

記憶體設計模式

Android組件泄露

進程

記憶體API

主要組件和記憶體管理

調試工具

LogCat

ActivityManager API

StrictMode

Dumpsys

總結

5 多執行緒

預覽

執行緒基礎

Android多執行緒環境

Android應用程式執行緒

Android執行緒訊息

最佳實踐

執行緒

HandlerThread

AsyncTask

Loaders

Services

進程間通信

先進的技術

調試工具

StrictMode

總結

6 網路

預覽

協定

方法

頭部

逾時

內容

回響碼

連線類型

最佳實踐

延遲測定

批量連線

對回響進行快取

指數退避算法

輪詢VS推送

所提供的API

Android N帶來的新變化

調試工具

Android N網路ADB工具

Fiddler

Wireshark

Application Resource Optimizer

網路衰減

模擬網路加速和延遲

總結

7 安全 255

WhatsApp – 連續出現問題

深入代碼

捕獲APK檔案

從設備上拉取APK檔案

利用Wireshark捕獲APK檔案

利用外部網站

剖析APK檔案

代碼注入

操作碼

注入新代碼

簽名並重新構建應用程式

保護應用程式

非安全存儲

SharedPreferences

內部存儲

外部存儲

刪除檔案

使用外部存儲還是內部存儲

資料庫

資料庫中的性能

SQL注入

ORM框架

OrmLite

SugarORM

GreenDAO

Realm

網路

通信加密

嗅探

總結

8 最佳化電量消耗

分析

監測電池電量和充電狀態

識別充電狀態的變化

確定及回響電池電量的變化

Doze和App Standby

理解Doze

避免無用的網路請求

按需對待BroadcastReceivers

網路

總結

9 Android中的原生代碼

入門——在系統中配置NDK

JNI

基本概念

創建首個JNI程式HelloWorld-JNI

使用Android NDK創建一個原生Activity

調試NDK

Android.mk

NDK定義的變數

TARGET_PLATFORM

TARGET_ARCH

TARGET_ABI

NDK提供的宏

Application.mk

引入已存在的庫

導出頭檔案

總結

10 性能提示

點陣圖

載入

處理

快取

顯示

管理記憶體

圖像最佳化

解析度

壓縮

序列化

JSON的改進

JSON的替代品

本地序列化

代碼改進

Getter和Setter

內部類

Android N中的Java 8

設定

特性

Jack工具鏈

APK最佳化

移除未使用的代碼

移除未使用的資源

總結

序言

應用程式在移動世界中能否成功,性能是其中一個關鍵的因素。如果一個應用程式運行緩慢,用戶可能會放棄繼續使用它。學習如何創建一個應用程式,讓程式在速度、性能,以及功能互動之間達到平衡,將會是一個挑戰。做到這點比以往任何時候都更重要。

《Android高性能編程》將讓你學習到如何讓程式能夠運行到儘可能多的硬體設備上,使得應用程式覆蓋更多用戶。這本書首先簡要地介紹了Android開發中一些最先進的技術,以及性能對Android應用程式的重要性。接著,介紹了使用Android SDK工具,對Android應用程式進行調試和分析的常規做法。本書將討論一些先進的主題,例如,打造布局、多執行緒、網路以及安全。電池電量是應用程式的最大瓶頸之一,本書將通過典型的代碼,闡釋如何減少電量消耗,以及在不同情形下如何測量電量的消耗。

本書探討的技術,是為打造一個最佳化高效的系統。這是一個不會消耗大量電量,或引起記憶體泄露,隨著時間的推移,運行越來越慢的系統。

這本書涵蓋了什麼

第1章,引言:為什麼需要高性能?對主題進行概要介紹,簡要分析了Android平台的現狀,以及高性能對Android應用程式的重要性。

第2章,高效調試。涵蓋了調試和分析Android應用程式常用的一些工具, 不僅限於Android SDK 所提供的,還包括一些第三方的。

第3章,打造布局。展示最佳化Android程式的相關技術,編寫記憶體高效的應用程式,並介紹記憶體分配以及垃圾回收的相關概念。

第4章,記憶體。提供了許多UI設計方面的見解,通過學習這些內容,打造載入迅速,更新高效,不會令用戶察覺到延遲的UI界面。

第5章,多執行緒。介紹了Android應用程式中可供使用的各種執行緒,以及它們特定的使用場景。一些先進的技術,例如IPC,將會通過代碼示例來展示。

第6章,網路。介紹了高效操作網路的相關技術,以及從服務端獲取數據的一些技術,例如指數退避算法或避免輪詢。

第7章,安全。涵蓋了確保Android應用程式安全的相關技術,如何利用Android自帶的安全加密機制,以及如何獲取關於連線的信息,或者只是在連線變化的時候得到通知。

第8章,最佳化電量消耗。通過典型的代碼,演示如何耗盡電池的電量,如何阻止它,以及在各種情形下如何權衡電量的消耗;許多開發者不知道,開發一個拍照或錄製視頻的應用程式時,任何處理預覽以及保存數據。

第9章,Android中的原生代碼。這一章節將全部用於介紹Android中的原生代碼和C++以及它們的用法。

第10章,性能提示。幫助開發者在平時的開發中,避開影響效率的方案;這是前面章節中未涉及的一個最佳實踐指南。

你需要準備什麼?

你需要準備以下硬體設備。

√ 運行環境為Windows、Linux,或者Mac OS X 的PC/筆記本電腦。

√ Android手機。最好是高端一點的,並且系統版本高於Android5.0。

這本書為誰而寫?

這本書是為那些已經擁有豐富Android知識,想要進一步鞏固和學習技術,來提高應用程式性能的開發者而寫的。我假設他們已經熟悉整個Android SDK,且為此工作了多年。他們也熟悉Android框架,比如,能使用NDK編寫原生代碼,NDK對性能來說至關重要。

約定

本書會涉及幾種不同的文本樣式,分別代表不同類型的信息。下面展示了其中一些樣式及它們代表的意思。

代碼文本、資料庫表名、檔案名稱、檔案擴展名、路徑、URLs、用戶輸入,以及推特賬號名的文本樣式如下。

“If you go to this folder and call the command adb, you will see on the screen a list of available options.”

代碼塊的格式如下。

<resources>

<style name=”Theme.NoBackground”parent=”android:Theme”>

<item name=”android:windowBackground”>@null</item>

</style>

</resources>

任何命令行輸入輸出的格式如下。

adb shell dumbsys gfxinfo <PACKAGE_NAME>

新條款以及重要的詞會以黑體展示。螢幕上顯示的單詞,例如選單或者對話框內出現的文本格式類似這樣:“To debug the overdraw on the device,Android provides a helpful tool that can be enabled inside the Developer options.”

警告或重要提示或出現這樣一個框框中。

提示及小技巧會以這樣的形式出現。

讀者反饋

歡迎讀者反饋。你對這本書的看法——喜歡或者不喜歡。讀者的反饋對我們來說非常重要,它能最大程度地幫助我們寫出讀者需要的內容。

客服支持

很高興您成為Packt系列叢書的擁有者,為此,我們會為您提供一系列服務

你可以通過下列步驟下載代碼檔案。

1.到我們的網站登錄或註冊。

2.點擊網站頂部的SUPPORT tab頁面。

3.點擊Code Downloads & Errata。

4.在搜尋框中輸入書本的名字。

5.選中你要下載代碼的對應的圖書。

6.在下拉選單中選擇圖書的購買地。

7.點擊Code Download。

可以在Packt 出版社網站對應的書本頁面,點擊Code Files按鈕來下載本書的代碼檔案。書本頁面可以通過搜尋框中輸入書本名進入。注意,前提是你需要登錄你的Packt賬戶。

檔案下載好後,請確使用的解壓工具是最新版本。

√ Windows使用WinRAR / 7-Zip

√ Mac 使用 Zipeg / iZip

√ Linux 使用 7-Zip / PeaZip

同時,我們也有其他豐富的代碼、書本目錄、視頻等可以提供給你。

我們也為你提供了本書所用到的截屏和圖表。這些彩圖更利於你理解和區別代碼結果的變化。你可以在以下網址中下載這些檔案

勘誤

儘管我們已經非常仔細,以確保書本內容的準確性,但是錯誤難免還是會發生。如果你在書中遇到一個錯誤(可能是一個文本錯誤或者代碼錯誤),如果你能報告給我們,我們不甚感激。這樣做能夠減少對其他讀者的困擾並能幫助我們在後續版本中改進這些問題。

著作權保護

對網際網路上所有的媒體資源來說,著作權保護一直以來都是一個問題。Packt出版社十分重視對著作權和許可證的保護。如果你在網際網路上遇到以任何形式非法盜版我們內容的情況,請立刻為我們提供地址或網站名,以便我們及時補救。

非常感謝您對維護我們作者的權益、打擊盜版,並使得我們能為用戶帶來更好的內容所給予的幫助。

相關詞條

熱門詞條

聯絡我們