Android官方开发文档Training系列课程中文版:创建自定义View之View的优化
原文地址:http://android.xsoftlab.net/training/custom-views/optimizing-view.html
現(xiàn)在已經(jīng)完成了一個擁有良好設(shè)計的View,它即可以響應(yīng)手勢,又可以在狀態(tài)之間過渡。為了避免View有卡頓的感覺,需要確保動畫始終是按照每秒60幀的頻率執(zhí)行的。
盡可能的降低頻率
為了使View更加流暢,需要從頻繁調(diào)用的方法中剔除不必要的代碼。
首先從onDraw()方法開始,在該方法中動刀會有明顯的流暢感。尤其是應(yīng)該移除onDraw()方法中的內(nèi)存分配代碼,因為內(nèi)存分配會導(dǎo)致垃圾回收,這可能會使程序暫停。應(yīng)該在程序初始化時或在動畫開始執(zhí)行之前申請內(nèi)存,絕不要在動畫運(yùn)行的過程中申請內(nèi)存。
除了精簡onDraw()方法之外,還應(yīng)該確保降低這些方法的調(diào)用頻率。onDraw()方法的大部分調(diào)用是由invalidate()方法引起的,所以要移除不必要的invalidate()執(zhí)行代碼。
另一項代價非常高昂的操作就是布局的測量。每次調(diào)用requestLayout()時,Android的UI系統(tǒng)都會測量整個View層級來確定每個View都需要多大尺寸。如果找到尺寸有沖突的,還需要進(jìn)行多次測量。UI設(shè)計者有時候需要創(chuàng)建內(nèi)嵌ViewGroup的深層級布局來使UI布局正確。這些深層級的布局層級會引起性能問題。要使View層級盡可能的潛。
如果你有一個稍微復(fù)雜一點的UI,考慮寫一個自定義ViewGroup來執(zhí)行這樣的布局。與內(nèi)置的View不同,你的自定義View可以對它的子View的尺寸與形狀作個假設(shè),這樣就可以不用去測量子View的尺寸了。餅圖示例展示了如何將ViewGroup作為自定義View的一部分。餅圖含有一些子View,但是絕對不會去測量它們。相反的,它通過獨有的自定義布局算法直接為這些View設(shè)置了尺寸。
總結(jié)
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:创建自定义View之View的优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android中如何查看在res中存放的
- 下一篇: android sina oauth2.