Android有什麼好的技術點適合進行技術分享?
在組內要做一次Android開發的技術分享,時間大概在10分鐘左右,希望能找到一個比較好的切入點進行分享。請大家給出一些建議,如果覺得合適的我會去調研,最終結果也會與您分享。
例如:
推薦:Android 5.0的GC
理由:與之前的GC相比在策略和演算法上都做了調整,大幅度提高了GC的效率。
謝 @M.A.G.I 邀請。
強烈推薦宇宙中心的流氓村,炸雞做的很不錯。
酒足飯飽,前來扯淡。
Android 上可供討論十天八天的技術點非常多,肥肥分享一些肥肥知道的一些。
- 進程間通信的Binder機制。FrameWork 層的核心。
- JNI 的使用。FrameWork 層的基石,幾乎整個 FrameWork 層都是通過 JNI 實現對 Library 層調用的。
- Material Design 設計。傳說中設計師導向型的 UI 風格。
- OpenGL ES 3.1 ,Android 5.0開始提供 Java 介面和原生支持。
- 低功耗藍牙(貌似從4.3開始支持)。
- Android 5.0提供的 JobScheduler API。允許通過為系統定義要在以後的某個時間或特定條件下非同步運行的任務,優化電池壽命。
- Zygote 進程。FrameWork 層的祖宗,所有的 app 進程以及系統服務進程都是 zygote fork 出來的。不然怎麼會叫 zygote 呢。
- Android Netd。Android 中網路守護進程,通過封裝各種底層協議,隔離底層網路介面的差異,給 FrameWork 層提供統一介面服務。
- Vold: Volume Daemon, 用於管理和控制 Android 平台外部存儲設備的後台進程,這些管理和控制,包括 SD 卡的插拔事件檢測、 SD 卡掛載、卸載、格式化等。
- Rild: Radio Interface Layer Daemon, 用於智能手機的通信管理和控制的後台進程,所有和手機通信相關的功能,例如接打電話、收發簡訊/彩信、 GPRS 等都需要 Rild 的參與。
- Surface 系統。你會明白 Activity 是如何完成界面繪製的。
- 有 Zygote fork 出來的 SystemServer 。Android 中幾乎所有的核心服務(ActivityManagerService、WindowManagerService 等)都存在於 SystemServer 中。
- 智能指針。所有 Android 源碼剖析的書必講的一個。
================2015年04月28日下午補充================
參考資料:
Android 的設計與實現 I II 兩卷
深入理解 Android:Wifi、NFC 和 GPS
深入理解 Android I II 兩卷
深入理解 Android 內核設計思想
Android 系統源代碼情景分析
技術點10分鐘只能講點皮毛,如果組內其他成員不熟悉 Android 的話其實幫助也不大。
我建議可以分享一些大家都能用到的工具。
比方說 Facebook 開源的 Stetho:
這個東西簡單來說就是用 Chrome Develop Tools 來 Debug Android App,可以查看網路請求,包括 api image 等,也可以用來查看修改資料庫和 SharedPref/ 。
不單單對 Android 開發來說很有用,對於後端程序員來說也是特別好用的。
他們本來就比較熟悉 Chrome 的 Develop Tools,你一旦集成了 Stetho 到他們那裡,只要他們有 debuggable 的 app 裝在手機上,查看網路請求找尋錯誤原因簡直太容易了。
最酷的是集成這個庫只要用幾分鐘就可以了,即插即用。
給幾張截圖:
謝 @M.A.G.I邀,以我對你的了解,分享根本不算個事,我想你提問的目的是:在10分鐘內,分享什麼內容能夠既讓人感覺有營養又讓人印象深刻?
我的建議是:分享課程就像做產品一樣,找到受眾的痛點,然後通過你的課程去解決他們的痛點。
比如:
- 主題:Android手寫優化;
推薦理由:Android的手寫效果和蘋果沒得比,但有很多可以優化的地方,從對消息機制的分析到屏幕刷新機制的原理分析,都可以深入研究一下。
- 主題:Android APK瘦身;
推薦理由:APK可優化的地方非常多,比如通過代碼混淆優化代碼;刪掉無用的靜態資源;資源文件壓縮(多媒體文件)等等。
- 主題:APP啟動速度優化;
推薦理由:這是我沒有解決的一個問題,分析Android源碼發現優化的空間不大,祝你研究成功~
在騰訊搞了一年,apk體積瘦身一直是個不錯的話題,自己也用兩種不同的方法減了不少體積,大apk要做分包處理規避dex的65536問題、多業務怎麼支持插件化、方法數減少、dexopt內存限制補丁、線程池監控線程防止溢出、增量編譯,這些都是比較實際的應用問題。至於源碼,對哪個點感興趣搞起就是了,樓主說的GC貌似老羅出博客文章解析了。
github上有個開源項目源碼解析項目,裡面乾貨很多
裡面的每個項目都足夠你做個優秀的技術分享案例了
aosp-exchange-group/android-open-project-analysis · GitHub
我說幾個工作中經常打交道的點吧。
Binder機制
理由:Android最重要的進程間通信。能幫助你快速定位死機原因。
Dropbox工作原理
理由:收集anr、crash、重啟等日誌。幫助你從各種錯誤日誌中快速找到嚴重問題點,特別是跑monkey。
debugged原理
理由:列印墓碑日誌。列印native進程調用棧。
dumpsys原理
理由:可列印service中重要狀態值。在有些死機場景下列印不出某個service,如果不懂dumpsys框架,那就錯過了非常重要的線索。
ANR機制
理由:超時機制。
handle機制
理由:死鎖了?跨進程調用耗時操作?請用handle處理。
watchdog機制
理由:監測SystemServer進程中最重要的幾個service是否發生阻塞 。如果你的手機卡了一會接著重啟了,那可能就是它起作用了。
理由:保證系統有足夠的內存可用。
RxJava 怎樣?
retrofitService.getImage(url)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(bitmap -&> myImageView.setImageBitmap(bitmap));
ReactiveX/RxJava · GitHub
ReactiveX/RxAndroid · GitHub
Episode 3 | The RxJava show with Dan Lew (Part 1)
Grokking RxJava, Part 1: The Basics
繪圖系統:View是如何顯示出來的
內存優化
啟動速度優化
Touch事件傳遞
Mat使用
HWUI
SurfaceFlinger
Bitmap內存管理
等等
我目前感興趣的,以及題主可以參考的分享:
WebView的內存優化
ndk的開發與調試
移動安全
矩陣與動畫
groovy開發Android
support各個包的多個版本的介紹
性能提升
優秀三方庫的介紹
自動化測試UI
romain guy和chet haase博客上摘一篇,譬如這個字體渲染的:
https://medium.com/@romainguy/androids-font-renderer-c368bbde87d9
畢業一年的菜鳥,最近一直在琢磨比較好的app整體框架,看到您寫的那個那篇博客很是受啟發,谷歌官方的那個data binding是個mvvm模式,也不知採用哪個方案更好啊。
1. Android Application bootstrap flow
2. View drawing flow
推薦閱讀:
※如何有逼格地輸出「Hello, World!」?
※垃圾回收機制中,引用計數法是如何維護所有對象引用的?
※碼農們最常說的「謊言」有哪些?
※IT行業都有哪些職位,初學者(0基礎,新人)該如何選擇,才能夠快速進入這個行業?
※如何教會非計算機專業的女友寫代碼並且找到工作?