當前位置:編程學習大全網 - 網絡軟體 - android中對view的更新有幾種方式 多線程和雙緩沖的使用情況

android中對view的更新有幾種方式 多線程和雙緩沖的使用情況

Android中對View的更新有很多種方式,使用時要區分不同的應用場合。最要緊的是分清:多線程和雙緩沖的使用情況。

現在可以嘗試理解下面的模擬場景:

兩個人:壹對夫妻,老公上班,老婆在家,現在他們都要吃飯。

“不使用多線程和雙緩沖”的情況是:老公在公司吃,老婆在家吃,互不幹擾,吃就是了。

“使用多線程和不使用雙緩沖”的情況是:老婆做好飯,另外讓人送壹份到公司,老公收到飯就可以吃了。

“使用多線程和使用雙緩沖”的情況是:老婆做好飯,等老公回家壹起吃。

1.不使用多線程和雙緩沖

這種情況最簡單了,壹般只是希望在View發生改變時對UI進行重繪。妳只需在Activity中顯式地調用View對象中的invalidate()方法即可。系統會自動調用 View的onDraw()方法。

2.使用多線程和不使用雙緩沖

這種情況需要開啟新的線程,新開的線程就不好訪問View對象了。強行訪問的話會報:android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views.

這時候妳需要創建壹個繼承了android.os.Handler的子類,並重寫handleMessage(Message msg)方法。android.os.Handler是能發送和處理消息的,妳需要在Activity中發出更新UI的消息,然後再妳的Handler(可以使用匿名內部類)中處理消息(因為匿名內部類可以訪問父類變量, 妳可以直接調用View對象中的invalidate()方法 )。也就是說:在新線程創建並發送壹個Message,然後再主線程中捕獲、處理該消息。

3.使用多線程和雙緩沖

Android中SurfaceView是View的子類,她同時也實現了雙緩沖。妳可以定義壹個她的子類並實現SurfaceHolder.Callback接口。由於實現SurfaceHolder.Callback接口,新線程就不需要android.os.Handler幫忙了。SurfaceHolder中lockCanvas()方法可以鎖定畫布,繪制玩新的圖像後調用unlockCanvasAndPost(canvas)解鎖(顯示),還是比較方便得。

  • 上一篇:淘寶查打假排查工作人員上班時間
  • 下一篇:咕咕空間普通時長是什麽
  • copyright 2024編程學習大全網