invalidate 方法是用來更新視圖(View)的方法,不過這東西的用法比較古怪
invalidate 方法如果你直接在主線程中調用,是看不到任何更新的。
如果跟線程結合使用的話
比如在下面的代碼中就會拋出異常
1.
UIThread
implements
Runnable{
2.
public
void
run(){
3.
invalidate();
4.
}
5.
}
怎麼樣解決上面的問題呢,如果你有兩個View,你需要一個View用來顯示當前的狀態,一個Thread去下載網絡數據
或者是讀取文件等,這些數據讀取完畢後你要更新View到當前屏幕上怎麼辦呢。看看下面的代碼,也許可以幫助你
第一種解決方案是:
01.
class
UIUpdateThread
implements
Runnable{
02.
public
void
run() {
03.
try
{
04.
Thread.sleep(
1000
*
5
);
05.
mHandler.post(mUpdateResults);
06.
}
catch
(InterruptedException e) {
07.
e.printStackTrace();
08.
}
09.
10.
}
11.
12.
final
Handler mHandler =
new
Handler();
13.
final
Runnable mUpdateResults =
new
Runnable() {
14.
public
void
run() {
15.
invalidate();
//更新視圖
16.
}
17.
};
18.
19.
}
第2中方案比較簡單
01.
LoadDataThread
implements
Runnable{
02.
public
void
run(){
03.
doLoadData();
04.
mHandler.sendMessage(mHandler.obtainMessage());
//這裏系統會自動調用handleMessage;這樣就可以更新視圖了
05.
}
06.
}
07.
Handler mHandler =
new
Handler(){
08.
@Override
09.
public
void
handleMessage(Message msg) {
10.
super
.handleMessage(msg);
11.
// 這裏處理視圖需要更新的代碼。
12.
13.
}
14.
};
對於postInvalidate用法來說就相對簡單點了直接調用就OK了,這裏就不詳細說了。