編輯:初級開發
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)解鎖(顯示),還是比較方便得。
。invalidate()函數重繪
當調用線程處於空閒狀態時,會調用onDraw,刷新界面,也就是說,該函數僅是標記當前界面過期,並不直接負責刷新界面()
70.Spinner1 注意:源碼第7行ArrayAdapter用R.array.colors數組來設置 1: @Overr
最近逛其它論壇的時候看到有這樣一個問題,需要界面加載完成後自動彈出軟鍵盤。開始我認為沒有那麼麻煩,最後自己做了一個小例子,還真不好搞定,直到昨天再想這個的問題的時候,想
眾所周知,在寫 android 程序的時候,很容易出現 OOM ,而出現的時機大多數是由 Bitmap decode 引發的: &
Google近期開始打擊盜版Android軟件,為開發者提供了 License Verification Library (LVL) 方式來防止Android軟件被盜版