Android 開發者選項,看起來很簡單的事情,其實很多同學對它了解得不夠,Google 用心良苦得為我們設計了這麼多小開關都是有它的作用的,今天也花了點時間,過了一遍全部的 30 多個開關,從中整理出 15 個對日常 Android 開發比較有幫助的選項。
需要指出的是,不同的 ROM 對開發者選項的支持不一樣,精簡掉一些很正常,我下面提到的都是官方支持的功能,當然不同的官方版本支持程度也不一樣,你手機上找不到也別奇怪。
抱歉這裡不介紹開發者選項在哪怎麼開啟之類的問題。
1. Stay awake
充電時保持屏幕喚醒,開發的時候,時不時的鎖屏真是夠了,開啟它後只要插著 USB 線就不需要總去解鎖屏幕啦。
2. Select runtime(Dalvik or ART)
ART runtime 下你的應用會更加絲滑,目前高版本的 Android 上已經直接是 ART runtime 了,但作為 Android 開發也許需要保證你的應用在兩種 runtime 下都能正常運行,這可能是測試時需要更多考慮的。
3. Process stats
裡面有關於當前運行進程的一切信息,對於一般用戶,它就是一堆無意義的數字,對於 Android 開發人員來說,調試時這些信息也許可以幫你大忙。
4. USB debugging
這個無需介紹,不開它怎麼調試呢?(雖然現在都流行無線調試了)
5. Allow mock locations
當你的應用需要用到 GPS 功能,獲取位置信息時(比如天氣應用),可以通過它搭配一些位置模擬應用,模擬全球任何地點。(還能干什麼?機智的你肯定想到啦)
6. Show surface updates
在界面繪制時,閃爍提醒,開啟它後簡直能閃瞎你的眼睛,但有時候我們需要精確知道具體的界面繪制細節時,不得不需要忍受這種折磨。
7. Show layout bounds
顯示布局格子,當你看到一個應用有很棒的界面效果,想知道它是怎麼布局的?開啟這個功能即可。我更常用的使用場景是:每當有 PM 過來問我人家這個界面是 Native 實現的,還是類似 Hybrid 方案的 Web 實現時,我就讓他開啟這個功能,WebView 是一個整體的格子,Native View 是各種小格子組合而成。(除非自己重繪實現自定義 View, 一般復雜布局也不會這麼干)
8. Force RTL layout direction
強制 RTL 布局,RTL 也就是 Right To Left,阿拉伯國家一般有這種文化,類似古時候的中國,文字從右往左讀,包括界面布局也是從右往左的,感覺操作習慣都跟我們是鏡像的,如果你跟我一樣不幸需要做這種坑爹適配的話,這也是必須掌握的技能。
9. Animation scale
動畫的尺度、速度調整也是很有用的功能,尤其在實現復雜的組合動畫效果時,調慢點可以看得更清楚,當然你可以在自己代碼裡調慢,但每次改代碼重新 build 很麻煩對不對?而且如果是 PM 走過來讓你研究一下某款 App 的酷炫動畫效果呢?
10. Simulate secondary displays
它允許你模擬不同屏幕尺寸下應用的表現,IDE 裡雖然也有類似的功能,可那畢竟只是個靜態的效果。
11. Debug GPU overdraw
這裡是指不正確的過度繪制:
原色: 沒有過度繪制
藍色: 一次過度繪制
綠色: 兩次過度繪制
粉色: 三次過度繪制
紅色: 四次及以上過度繪制
值得提醒的是,過度繪制有時是無法避免的,Android 建議是不要超過一次過度繪制,也就是可以是藍色的,不能綠了。
12. Strict mode enabled
嚴苛模式下,當應用做了一些影響性能的事情,屏幕會閃一下提醒你。你也可以在代碼裡為自己的應用開啟嚴苛模式,一旦發現一些性能問題,就會有詳細 Log 輸出, 為避免影響線上用戶,建議只在 Debug 模式下開啟。
13. Show CPU usage
在你屏幕右上角顯示一個小窗口,提示當前 CPU 的各種信息,在性能調試時會有一些幫助,看是否是 CPU 的負載過高導致了性能問題。
14. Profile GPU rendering
看下面這張圖,就明白它的作用了,開啟後,會在下方顯示一張實時繪制圖,記住那條綠線是性能流暢與否的底線,超過的時刻就會出現掉幀,就會有卡頓的感覺,界面性能調優的一個最重要指標就是將所有界面操作盡量優化到那條綠線以下。具體的原理可以看胡凱同學的 Android 性能優化典范,我的公眾號裡也收錄了他這篇經典文章。
15. Don't keep activities
開啟這個選項後,當你從 Activity A 跳轉到 Activity B 時,Activity A 就會被立即銷毀,這一般用來模擬設備內存不足時後台 Activity 被銷毀的場景,如果你的應用能做到開啟它時功能仍基本正常,說明代碼設計得比較合理,不同 Activity 之間的耦和很低,對於復雜業務的應用來說,能做到這點真心不容易。