1主线程中显示更新ui
2子线程中执行耗时操作
3子线程做的每一步耗时操作向主线程发消息,主线程更新ui;
我写了一个例子核心代码如下
public class MainActivity extends Activity {
public ProgressBar pb;
Thread t;
int value = 0;
Handler handler = new Handler() {
// 接收message发送过来的消息
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
System.out.println(value+">>>>>>>");
msg.arg1 = value;
pb.setProgress(value);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
public void btn_download(View v) {
// 显示进度条
pb.setVisibility(v.VISIBLE);
// 实例化线程对象
t = new Thread(new myThread());
// 将线程压入县城队列
handler.post(t);
}
// 创建一个线程
class myThread implements Runnable {
@Override
public void run() {
// 把消息和要做的事情写到这
value++;
Message message = handler.obtainMessage();
message.arg1 = value;
// 发送本消息,实际上是在触发handleMessage(Message msg)的执行
handler.sendMessage(message);
// 延时压入线程每1000毫秒执行一次
handler.postDelayed(t, 1000);
// 默认进度条的最大值是100
if (value == 100) {
handler.removeCallbacks(t);
}
}
}
private void init() {
pb = (ProgressBar) findViewById(R.id.pb);
}
}
如果没有看懂,下载我的例子
http://download.csdn.net/detail/zhaihaohao1/8277579