您的位置:首页 > 产品设计 > UI/UE

Androidの多线程之更新ui(Thread+Handler+Message)

2012-11-22 16:03 387 查看
流程:

1.点击开始,显示进度对话框,启动线程,循环发送消息(1-100)

2.更新对话框中的进度,和标题栏的进度

3.到达最大进度值时,关闭对话框,标题栏显示更新完成

解析:

1.在主线程处理handler的消息,更新Ui

2.在其他线程里用主线程的handler不停发送消息

3.线程启动,发送消息

package com.bvin.thread;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;

public class MainrActivity extends Activity {
/** Called when the activity is first created. */
private Handler handler;
private ProgressDialog dialog;

private TextView tv;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.main);
setSecondaryProgress(10000); //设置副进度为10000
handler = new Handler(){

@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
Log.e("progress:", ""+msg.what);
setTitle("更新--"+msg.what);
setProgress(msg.what*100);
if(msg.what==100){
setProgressBarVisibility(false); // 执行完后使进度条隐藏
dialog.dismiss();
setTitle("更新完成");
}
}

};
initViews();

}

private void initViews(){

dialog= new ProgressDialog(MainrActivity.this);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setMax(100);
Button bt = (Button)findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
setProgressBarVisibility(true);
dialog.show();
exec();
}
});

tv  = (TextView)findViewById(R.id.tv);

}

private void exec(){

new Thread(new Runnable(){

@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<=100;i++){

handler.sendEmptyMessage(i);
}
}

}).start();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: