要移動視圖,我調用setX,setY和其他一些函數來設置寬度和高度,並在每個函數結束時調用invalidate或requestLayout。因此,每個用戶事件都會調用invalidate和requestLayout多次。這是否會觸發每個用戶事件的多個佈局/繪圖?調用requestLayout或多次失效會傷害性能嗎?
4
A
回答
1
是的,它的確如此。每次你調用無效時,視圖本身都會重繪!
1
每次你調用invalidate,視圖本身都會重繪!
這在技術上並非如此。 invalidate
將在視圖上設置一個標誌,使其符合重繪要求。
一個簡單的測試是在onDraw
中放入一條日誌語句,然後在循環中調用invalidate
。你會看到每個迭代都沒有日誌。
3
當然not.We可以在ViewRootImpl
void invalidate() {
mDirty.set(0, 0, mWidth, mHeight);
if (!mWillDrawSoon) {
scheduleTraversals();
}
}
無效設置髒區看到代碼,並調用scheduleTraversals,它會調用doTraversal。
void doTraversal() {
if (mTraversalScheduled) {
mTraversalScheduled = false;
mHandler.getLooper().getQueue().removeSyncBarrier(mTraversalBarrier);
if (mProfile) {
Debug.startMethodTracing("ViewAncestor");
}
performTraversals();
if (mProfile) {
Debug.stopMethodTracing();
mProfile = false;
}
}
}
,我們可以看到在代碼mTraversalScheduled標誌,如果我們scheduleding旅遊,使無效的事件triggerd,mTraversalScheduled是doTraversal假的,所以該方法將直接返回。 因此,不是每個稱爲performTravel的無效事件,也不是每個稱爲重繪的無效事件
相關問題
- 1. 爲什麼document.write會傷害web性能?
- 2. 做太多ids傷害性能
- 3. screensaver傷害CUDA性能?
- 4. 使用元描述會傷害我嗎?
- 5. 初始化所有ko.observables會傷害嗎?
- 6. Javascript網址會傷害SEO嗎?
- 7. 如何聽多播會傷害我?
- 8. 多餘的,不需要的$ _POST鍵會傷害系統嗎?
- 9. 是否聲明C++變量const幫助或傷害性能?
- 10. 使ListAdapter.getView()同步會損害性能嗎?
- 11. 實例方法的傷害或好處調用靜態方法
- 12. 可以穿線傷害CPU嗎?
- 13. Box2d傷害物理
- 14. RPG傷害計算?
- 15. 是否使用WHERE IN傷害查詢性能?
- 16. 獲得通過屬性附加傷害
- 17. 保留的屬性附加傷害名
- 18. jQuery的數組屬性附加傷害
- 19. 多次使用MUI_PAGE_WELCOME是無害的嗎?
- 20. 從長遠來看,HttpRuntime.Cache上的ConcurrentDictionary會傷害到我嗎?
- 21. 從一個班級繼承以後會傷害你嗎?
- 22. 從onSizeChanged()調用requestLayout()時沒有效果?
- 23. 解析大型聯盟XML饋送會傷害網站的性能
- 24. Marketo Munchkin同步請求傷害JS性能
- 25. 是否通知書傷害到一個網站,它的性能
- 26. 取消傷害動畫
- 27. 對敵人造成傷害
- 28. 殭屍如何傷害?
- 29. 連擊帶來傷害as3
- 30. Java Frame Animation傷害表現