|
|
|
使用Handler
创建后台线程最友好的办法是创建一个Handler子类的实例.只需一个Handler对应一个Activity.自定义的后台线程可与Handler通信,Handler将与UI线程一起工作.和Handler通信,需要两个选项,message和runnable对象.
Message
发送Message到Handler,第一步调用obtainMessage(),从池中得到Message对象.
然后,可通过消息队列将Message发送给Handler,通过sendMessage…()方法族:
sendMessage() 立即发送Message到消息队列
sendMessageAtFrontOfQueue() 立即发送Message到队列,而且是放在队列的最前面
sendMessageAtTime() 设置时间,发送Message到队列
sendMessageDelayed() 在延时若干毫秒后,发送Message到队列
为了处理Message,Handler需要实现handleMessage(),当Message出现在队列中时,会调用handleMessage()方法.另外,Handler可在需要时更新UI.
以下示例演示一个进度条,每隔1秒钟增加1/20个单位.
java代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android rientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
< rogressBar
android:id="@+id/progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
复制代码
java代码:
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;
public class ShowThread extends Activity {
ProgressBar bar;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
bar.incrementProgressBy(5);
}
};
boolean isRunning = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bar = (ProgressBar) findViewById(R.id.progress);
}
@Override
protected void onStart() {
super.onStart();
bar.setProgress(0);
Thread background = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 20 && isRunning; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
handler.sendMessage(handler.obtainMessage());
}
}
});
isRunning = true;
background.start();
}
@Override
protected void onStop() {
super.onStop();
isRunning = false;
}
}
复制代码 |
|