既然android給我們提供了Handler機制來解決這樣的問題,請看如下代碼:
01 |
public class HandlerTestActivity extends Activity
{ |
02 |
private TextView
tv; |
03 |
private static final int UPDATE
= 0 ; |
04 |
private Handler
handler = new Handler()
{ |
05 |
06 |
@Override |
07 |
public void handleMessage(Message
msg) { |
08 |
//
TODO 接收消息並且去更新UI線程上的控件內容 |
09 |
if (msg.what
== UPDATE) { |
10 |
//
Bundle b = msg.getData(); |
11 |
//
tv.setText(b.getString("num")); |
12 |
tv.setText(String.valueOf(msg.obj)); |
13 |
} |
14 |
super .handleMessage(msg); |
15 |
} |
16 |
}; |
17 |
18 |
/**
Called when the activity is first created. */ |
19 |
@Override |
20 |
public void onCreate(Bundle
savedInstanceState) { |
21 |
super .onCreate(savedInstanceState); |
22 |
setContentView(R.layout.main); |
23 |
tv
= (TextView) findViewById(R.id.tv); |
24 |
25 |
new Thread()
{ |
26 |
@Override |
27 |
public void run()
{ |
28 |
//
TODO 子線程中通過handler發送消息給handler接收,由handler去更新TextView的值 |
29 |
try { |
30 |
for ( int i
= 0 ;
i < 100 ;
i++) { |
31 |
Thread.sleep( 500 ); |
32 |
Message
msg = new Message(); |
33 |
msg.what
= UPDATE; |
34 |
//
Bundle b = new Bundle(); |
35 |
//
b.putString("num", "更新後的值:" + i); |
36 |
//
msg.setData(b); |
37 |
msg.obj
= "更新後的值:" +
i; |
38 |
handler.sendMessage(msg); |
39 |
} |
40 |
} catch (InterruptedException
e) { |
41 |
e.printStackTrace(); |
42 |
} |
43 |
} |
44 |
}.start(); |
45 |
} |
46 |
47 |
} |