Thread與Viewr的錯誤
發表人:
Seachaos
積分: 2432
積分: 2432
Android直接在Thread操作View會發生錯誤
要避免這錯誤就是透過Handler來操作UI
例如以下範例:
onCreate
[quote]
...
Thread th1 = new Thread(new myRunnable(this));
th1.start();
...
[/quote]
myRunnable
[quote]
class myRunnable implements Runnable{
myActivity act;
public myRunnable(myActivity act){
this.act=act;
}
@Override
public void run(){
while(true){
try{
Thread.sleep(1000);
Message msg = new Message();
act.myHandler.sendMessage(msg);
}catch(Exception e){
act.showText.setText("Error: "+e.toString());
}
);
}
}
}
[/quote]
在Activity的中的myHandler物件
[quote]
public Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch(msg.what){
default:
showText.setText(Integer.toString(msg.what));
}
super.handleMessage(msg);
}
};
[/quote]
showText就是TextView
透過這個方法就可以在Activity操作程式UI了
要避免這錯誤就是透過Handler來操作UI
例如以下範例:
onCreate
[quote]
...
Thread th1 = new Thread(new myRunnable(this));
th1.start();
...
[/quote]
myRunnable
[quote]
class myRunnable implements Runnable{
myActivity act;
public myRunnable(myActivity act){
this.act=act;
}
@Override
public void run(){
while(true){
try{
Thread.sleep(1000);
Message msg = new Message();
act.myHandler.sendMessage(msg);
}catch(Exception e){
act.showText.setText("Error: "+e.toString());
}
);
}
}
}
[/quote]
在Activity的中的myHandler物件
[quote]
public Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch(msg.what){
default:
showText.setText(Integer.toString(msg.what));
}
super.handleMessage(msg);
}
};
[/quote]
showText就是TextView
透過這個方法就可以在Activity操作程式UI了