本書是Android的進階學習指南,主要為Android初中級開發者進階所需的知識,高級開發者也可以從本書中發現很多共鳴點。本書從8個方面對50個知識點進行分類講解,包括基礎篇、系統架構篇、經驗總結篇、新技術篇、性能優化篇、移動安全篇、工具篇、測試篇。熟練掌握這些知識點后,應該就能夠應付實際項目開發中的絕大部分問題了。 本書的主要目的在于給讀者一個完整的Android中高級開發者知識圖譜。筆者希望通過本書的系統講解,能夠幫助讀者在面試和工作中收獲自己滿意的成績。
本書從基礎、架構、安全、性能優化、新技術、測試等角度,通過簡單的代碼示例詳盡地展示了 Android 開發技巧
本書作者技術基礎深厚扎實,是新技術的探索和追逐者,他對于技術發自內心地熱愛, 是業界非常的 Android 架構師
本書是作者在一線互聯網企業工作多年的經驗沉淀,從不同角度對 Android 新技術拋磚引玉,由淺入深,將實戰中的案例抽象成原型,通俗易懂
本書對于技術的解讀樸實風趣,深入淺出,是 Android 工程師的進階寶典,騰訊、華為、阿里、百度、平安科技等一線移動開發工程師聯袂推薦
顧浩鑫,網絡 ID:ASCE1885,平安金融科技移動研發工程師,目前主要從事 Android & React Native 相關研發工作,畢業于華中科技大學圖像識別與人工智能研究所,曾先后就職于華為、百度、平安科技。
第1篇基礎篇
第1章Android觸摸事件傳遞機制
1.1觸摸事件的類型
1.2事件傳遞的三個階段
1.3View的事件傳遞機制
1.4ViewGroup的事件傳遞機制
第2章Android View的繪制流程
2.1繪制的整體流程
2.2MeasureSpec
2.3Measure
2.4Layout
2.5Draw
第3章Android 動畫機制
3.1逐幀動畫(Frame Animation)
3.1.1XML 資源文件方式
3.1.2代碼方式
3.2補間動畫(Tween Animation)
3.2.1插值器 Interpolator
3.2.2AlphaAnimation
3.2.3ScaleAnimation
3.2.4TranslateAnimation
3.2.5RotateAnimation
3.2.6自定義補間動畫
3.3屬性動畫(Property Animation)
3.3.1Evaluator
3.3.2AnimatorSet
3.3.3ValueAnimator
3.3.4ObjectAnimator
3.4過渡動畫(Transition Animation)
第4章Support Annotation Library 使用詳解
4.1Nullness 注解
4.2資源類型注解
4.3類型定義注解
4.4線程注解
4.5RGB 顏色值注解
4.6值范圍注解
4.7權限注解
4.8重寫函數注解
4.9返回值注解
4.10@VisibleForTesting
4.11@Keep
第5章Percent Support Library使用詳解
第6章Design Support Library使用詳解
6.1Snackbar
6.2TextInputLayout
6.3TabLayout
6.4NavigationView
6.4.1導航菜單
6.4.2導航頭部
6.5FloatingActionButton
6.5.1使用浮動操作按鈕
6.5.2其他選項
6.5.3點擊事件
6.6CoordinatorLayout
6.7CollapsingToolbarLayout
6.8BottomSheetBehavior
第7章Android Studio中的NDK開發
7.1ABI的基本概念
7.2引入預編譯的二進制 C/C 函數庫
7.3直接從 C/C 源碼編譯
7.3.1配置 ndk.dir 變量
7.3.2在 Gradle 中配置 NDK 模塊
7.3.3添加 C/C 文件到指定的目錄
7.4使用 .so 文件的注意事項
7.4.1使用高平臺版本編譯的 .so 文件運行在低版本的設備上
7.4.2混合使用不同的C 運行時編譯的 .so 文件
7.4.3沒有為每個支持的 CPU 架構提供對應的 .so 文件
7.4.4將 .so 文件放在錯誤的地方
7.4.5只提供 armeabi 架構的 .so 文件而忽略其他 ABIs 的
第8章Gradle 必知必會
8.1共享變量的定義
8.2通用配置
8.3aar 函數庫的引用
8.4簽名和混淆的配置
第9章通過Gradle打包函數庫到JCenter和Maven Central
9.1Maven Central 和 JCenter
9.1.1Maven Central
9.1.2JCenter
9.2Android Studio 獲取函數庫的原理
9.3上傳函數庫到 JCenter
9.3.1步驟一:在 Bintray 網站上注冊一個賬號
9.3.2步驟二:創建一個 Sonatype 賬號
9.3.3步驟三:在 Bintray 網站使能自動簽名
9.3.4步驟四:生成 POM 相關的信息
9.3.5步驟五:上傳函數庫到 Bintray
9.3.6步驟六: Bintray 用戶倉庫到 JCenter
9.3.7步驟七:同步函數庫到 Maven Central
第10章Builder模式詳解
10.1經典的 Builder 模式
10.2Builder 模式的變種
10.3變種 Builder 模式的自動化生成
10.4開源函數庫的例子
第11章注解在 Android 中的應用
11.1注解的定義
11.2標準注解
11.2.1編譯相關注解
11.2.2資源相關注解
11.2.3元注解
11.3運行時注解
11.4編譯時注解
11.4.1定義注解處理器
11.4.2注冊注解處理器
11.4.3android-apt插件
第12章ANR產生的原因及其定位分析
12.1ANR 產生的原因
12.2典型的 ANR 問題場景
12.3ANR 的定位和分析
12.3.1Logcat 日志信息
12.3.2traces.txt 日志信息
12.4ANR的避免和檢測
12.4.1StrictMode
12.4.2BlockCanary
第13章Android異步處理技術
13.1Thread
13.2HandlerThread
13.3AsyncQueryHandler
13.4IntentService
13.5Executor Framework
13.6AsyncTask
13.7Loader
13.8總結
第14章Android數據序列化方案研究
14.1Serializable
14.2Parcelable
14.3SQLiteDatabase
14.4SharedPreferences
14.5JSON
14.6Protocol Buffers及Nano-Proto-Buffers
14.7FlatBuffers
第15章Android WebView Java 和 JavaScript 交互詳解
15.1Java 調用 JavaScript
15.2JavaScript 調用 Java
第2篇系統架構篇
第16章MVP模式及其在Android中的實踐
16.1MVP 的基本概念
16.2MVP 與 MVC 的區別
16.3MVP 的開源實現
16.3.1Android-Architecture
16.3.2TODO-MVP
16.3.3TODO-MVP-Loaders
16.3.4TODO-MVP-Clean
16.3.5TODO-Databinding
16.3.6其他開源參考實現
16.4MVP 的好處
16.5MVP 存在的問題
第17章MVVM模式及Android DataBinding實戰
17.1Data Binding 表達式
17.2數據對象
17.3數據綁定
17.4事件綁定
第18章觀察者模式的拓展:事件總線
18.1為何要使用
18.2原理
18.3開源實現
18.3.1EventBus
18.3.2otto
18.4與觀察者模式及 Android 廣播的區別
第19章書寫簡潔規范的代碼
19.1Java 編碼規范
19.1.1源代碼文件的定義
19.1.2源代碼文件的結構
19.1.3遵循的格式
19.1.4命名約定
19.1.5Javadoc
19.2Android 命名規范
19.2.1布局文件的命名
19.2.2資源文件的命名
19.2.3類的命名
19.3CheckStyle 的使用
第20章基于開源項目搭建屬于自己的技術堆棧
20.1APP 的整體架構
20.2技術選型的考量點
20.3日志記錄能力
20.4JSON 解析能力
20.4.1gson
20.4.2jackson
20.4.3Fastjson
20.4.4LoganSquare
20.5數據庫操作能力
20.5.1ActiveAndroid
20.5.2ormlite
20.5.3greenDAO
20.5.4Realm
20.6網絡通信能力
20.6.1android-async-http
20.6.2OkHttp
20.6.3Volley
20.6.4Retrofit
20.7圖片緩存和顯示能力
20.7.1BitmapFun
20.7.2Picasso
20.7.3Glide
20.7.4Fresco
20.7.5Android-Universal-Image-Loader
第3篇經驗總結篇
第21章64K方法數限制原理與解決方案
21.164K 限制的原因
21.2使用 MultiDex 解決 64K 限制的問題
21.2.1Android 5.0 之前的版本
21.2.2Android 5.0 及之后的版本
21.3如何避免出現 64K 限制
21.4配置 MultiDex
21.5MultiDex Support Library 的局限性
21.6在開發階段優化 MultiDex 的構建
第22章Android 插件框架機制研究與實踐
22.1基本概念
22.1.1宿主和插件
22.1.2ClassLoader 機制
22.2開源框架
22.2.1android-pluginmgr
22.2.2dynamic-load-apk
22.2.3DynamicAPK
22.2.4DroidPlugin
22.2.5Small
第23章推送機制實現原理詳解
23.1推送的開源實現方案
23.1.1基于 XMPP 協議
23.1.2基于 MQTT 協議
23.2推送的第三方平臺
23.3自己實現推送功能
23.3.1長連接的建立(TCPConnectThread)
23.3.2數據的發送(TCPSendThread)
23.3.3數據的接收(TCPReceiveThread)
23.3.4心跳包的實現(TCPHeartBeatThread)
第24章APP 瘦身經驗總結
24.1APP 為什么變胖了
24.2從 APK 文件的結構說起
24.3優化圖片資源占用的空間
24.3.1無損壓縮 [ImageOptim]
24.3.2有損壓縮 [ImageAlpha]
24.3.3有損壓縮 [TinyPNG]
24.3.4PNG/JPEG 轉換為 WebP
24.3.5盡量使用 NinePatch 格式的 PNG 圖
24.4使用 Lint 刪除無用資源
24.5利用 Android Gradle 配置
24.5.1minifyEnable
24.5.2shrinkResources
24.5.3resConfigs
24.5.4ndk.abiFilters
24.6重構和優化代碼
24.7資源混淆
24.8插件化
第25章Android Crash 日志收集原理與實踐
25.1Java 層 Crash 捕獲機制
25.1.1基本原理
25.1.2線程信息
25.1.3SharedPreference 信息
25.1.4系統設置
21.1.5Logcat 中的日志記錄
25.1.6自定義 Log 文件中的內容
25.1.7MemInfo 信息
25.2Native 層 Crash 捕獲機制
25.3Crash 的上報
第4篇新技術篇
第26章函數式編程思想及其在Android中的應用
26.1代碼的簡化
26.2Operators 簡介
第27章依賴注入及其在Android中的應用
27.1基本概念
27.1.1構造函數注入
27.1.2Setter 函數注入
27.1.3接口注入
27.2為何需要框架
27.3開源框架的選擇
27.3.1ButterKnife
27.3.2RoboGuice
27.3.3Dagger
27.3.4Dagger2
27.3.5框架的對比
第28章Android世界的Swift:Kotlin在Android中的應用
28.1選擇 Kotlin 的原因
28.2Kotlin 的安裝和配置
28.3Kotlin 語言的特性
28.3.1可表達性
28.3.2空類型安全
28.3.3擴展函數
28.4Kotlin 的 Gradle 配置
28.5將 Java 類轉換成 Kotlin 類
28.6相關資料
第29章React Native For Android入門指南
29.1環境配置
29.1.1Homebrew
29.1.2nvm
29.1.3Node.js
29.1.4watchman
29.1.5flow
29.2Android 開發環境的要求
29.3React Native 工程配置
29.3.1安裝react-native
29.3.2生成工程
29.4Android Studio 工程概覽
29.5React Native 依賴庫修改為本地
1.1觸摸事件的類型
觸摸事件對應的是MotionEvent類,事件的類型主要有如下三種。yyACTION_DOWN:用戶手指的按下操作,一個按下操作標志著一次觸摸事件的開始。yyACTION_MOVE:用戶手指按壓屏幕后,在松開之前,如果移動的距離超過一定的閾值,那么會被判定為ACTION_MOVE操作,一般情況下,手指的輕微移動都會觸發一系列的移動事件。
yyACTION_UP:用戶手指離開屏幕的操作,一次抬起操作標志著一次觸摸事件的結束。在一次屏幕觸摸操作中,ACTION_DOWN和ACTION_UP這兩個事件是必需的,而ACTION_MOVE視情況而定,如果用戶僅僅是點擊了一下屏幕,那么可能只會監測到按下和抬起的動作。
1.2事件傳遞的三個階段
在了解了觸摸事件的三種主要類型之后,在講解Activity、View、ViewGroup的事件傳遞的具體實現之前,我們需要來了解本章開頭說的事件傳遞的三個階段。y分發(Dispatch):事件的分發對應著dispatchTouchEvent方法,在Android系統中,所有的觸摸事件都是通過這個方法來分發的,方法原型如下。ublicbooleandispatchTouchEvent(MotionEventev)在這個方法中,根據當前視圖的具體實現邏輯,來決定是直接消費這個事件還是將事件繼續分發給子視圖處理,方法返回值為true表示事件被當前視圖消費掉,不再繼續分發事件;方法返回值為super.dispatchTouchEvent表示繼續分發該事件。如果當前視圖是ViewGroup及其子類,則會調用onInterceptTouchEvent方法判定是否攔截該事件。yy攔截(Intercept):事件的攔截對應著onInterceptTouchEvent方法,這個方法只在ViewGroup及其子類中才存在,在View和Activity中是不存在的。方法的原型如下。
publicbooleanonInterceptTouchEvent(MotionEventev)同理,這個方法也是通過返回的布爾值來決定是否攔截對應的事件,根據具體的實現邏輯,返回true表示攔截這個事件,不繼續分發給子視圖,同時交由自身的onTouchEvent方法進行消費;返回false或者super.onInterceptTouchEvent表示不對事件進行攔截,需要繼續傳遞給子視圖。
yy消費(Consume):事件的消費對應著onTouchEvent方法,方法原型如下。publicbooleanonTouchEvent(MotionEventevent)該方法返回值為true表示當前視圖可以處理對應的事件,事件將不會向上傳遞給父視圖;返回值為false表示當前視圖不處理這個事件,事件會被傳遞給父視圖的onTouchEvent方法進行處理。
在Android系統中,擁有事件傳遞處理能力的類有以下三種。yyActivity:擁有dispatchTouchEvent和onTouchEvent兩個方法。
yyViewGroup:擁有dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent三個方法。yyView:擁有dispatchTouchEvent和onTouchEvent兩個方法。本章接下來將分別介紹View和ViewGroup的事件傳遞機制,Activity相關的內容穿插其中,將不再單獨介紹。
1.3View的事件傳遞機制
雖然ViewGroup是View的子類,但是這里所說的View專指除ViewGroup外的View控件,例如TextView、Button、CheckBox等,View控件本身已經是最小的單位,不能再作為其他View的容器。View控件擁有dispatchTouchEvent和onTouchEvent兩個方法。為了清楚地演示,我們首先來定義一個繼承TextView的類MyTextView,如下所示。我們將每個事件的觸發都打印了日志,以方便了解事件傳遞的流程。
同時定義一個MainActivity用來展示MyTextView,在這個Activity中,我們為MyTextView設置了點擊(onClick)和觸摸(onTouch)監聽,方便跟蹤了解事件傳遞的流程,代碼如下。
運行上面的代碼,點擊MyTextView,在Logcat中將打印出如下日志。
從上面的代碼和運行日志可以看出,dispatchTouchEvent、onTouchEvent這兩個方法的返回值可能存在以下三種情況。
yy直接返回false。
yy直接返回true。
yy返回父類的同名方法,例如super.dispatchTouchEvent。不同的返回值會導致事件傳遞流程相差甚遠,通過不斷修改這些方法的返回值并查看日志記錄,我們最終可以得到屏幕按下操作ACTION_DOWN事件的處理流程如圖1-1所示,ACTION_UP的流程與圖1-1類似,只不過事件類型不同而已,我們將不再一一列舉。
從上面的流程圖可以得出以下結論。
……
mark209102741
qqqqq
vvvvVB不巴巴爸爸巴巴爸爸
好
書不過。包裝能不能專業點書的角落邊上全都碰壞了
特別好特別好
涵蓋的知識點很多,但是排版過于寬松,內容過于粗略,知識點講解級不詳細,因此并不推薦購買
進階還是可以的
整體感覺不錯。
很好書是正版的
里面印刷有白頁,感覺正版就是這質量?
好,這書不錯。
不錯!不錯!不錯!
送貨快。包裝好。沒有質量問題。
好
很好,很不錯,值得購買
圖沒啥區別,我就不曬了。其實怎么說了,我以前不評論,但是因為我之前看評論,好像都說的不太好,代碼少啦,網上找的啦。其實本身你怎么可能在網上找不到書里的內容?如果你愿意完全可以不要買書,但書上的內容我感覺調理更清晰。至于有些人說關于代碼不詳細的問題,我特別要說明一下,這本書是給有基礎的人看的。不是給初學者,不是給初學者,不是給初學者,重要的事情說三遍。如果是剛學我建議買那個入門到精通,我就用的那個。還有一個就是買黑馬的視頻,淘寶有,兩三塊錢吧。
內容豐富翔實
寫的還不錯
東西不錯,就是最后的快遞態度很差,打電話一直不接,中間還夾著幾次正在通話中,然后打過去通了還是不接,好不容易接了電話,說了兩句話就直接掛了,無語
聽說這本書很好,剛收到,看了后再追評
非常的喜歡
還不錯,有些方面平時沒留意,受益了
太簡單了,簡單東西簡單描述,還不入看百度百科詳細,比較復雜點的,一兩行文字帶過,估計作者不懂
所講內容都是蜻蜓點水,沒什么代碼,感覺像是東抄西搬的,沒有真正結合實際項目
涵蓋面廣泛 羅列了各種流行框架 但是不是很詳細
書很快就收到了,先給個好評吧,看了兩個章節,本書覆蓋的知識點很全面,但是介紹不是很詳細,項目開發中用到可能還需要再去深入研究吧