在UI上如果要處理一些耗時的程序時,
如果都是放在onCreate裡去做,
那超過十秒的話,UI就會出見"ANR"的錯誤訊息,
因為UI不允許頁面hang住這麼久,
所以我們就需要把耗時的程序丟去thread去做。
先宣告一個thread,
而thread內放個"runnable"物件,
Thread t;
t = new Thread(run);
runnable物件是在定義要做什麼事,
所以把要執行的程式碼包在"run"這個function內。
private Runnable run = new Runnable() { }
而要執行的程式在runnable內跑時,
他不能直接的更改UI的內容。
會出現error message,
像是使用setText()來更改text的內容。
因為ui的內容只允許main thread來更改,
而runnable是產生的副thread,
所以要利用message的方式來溝通,
傳遞message的方式是利用handler物件,
Handler mHandler;
mHandler = new Handler(){
}
在runnable內,先宣告message物件,
他是要拿來打包內容,並且傳遞給handler做處理,
Message msg = new Message();
msg.what = 1;
mHandler.sendMessage(msg);
然後在handler裡就可以接收這個message,
並且判斷what這個值。
public void handleMessage(Message msg) {
switch(msg.what){
}
}
最後在handleMessage內來處理更改ui的動作。
SampleCode
Ref
沒有留言:
張貼留言