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

来源:互联网 发布:网上淘宝贷款是真的吗 编辑:程序博客网 时间:2024/06/04 19:19

流程:

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

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

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

 

解析:

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

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

3.线程启动,发送消息

 

 1 package com.bvin.thread; 2  3 import android.app.Activity; 4 import android.app.ProgressDialog; 5 import android.os.Bundle; 6 import android.os.Handler; 7 import android.os.Message; 8 import android.util.Log; 9 import android.view.View;10 import android.view.Window;11 import android.widget.Button;12 import android.widget.TextView;13 14 public class MainrActivity extends Activity {15     /** Called when the activity is first created. */16     private Handler handler;17     private ProgressDialog dialog;18     19     private TextView tv;20     21     @Override22     public void onCreate(Bundle savedInstanceState) {23         super.onCreate(savedInstanceState);24         this.getWindow().requestFeature(Window.FEATURE_PROGRESS);25         setContentView(R.layout.main);26         setSecondaryProgress(10000); //设置副进度为1000027         handler = new Handler(){28 29             @Override30             public void handleMessage(Message msg) {31                 // TODO Auto-generated method stub32                 super.handleMessage(msg);33                 Log.e("progress:", ""+msg.what);34                 setTitle("更新--"+msg.what);35                 setProgress(msg.what*100);36                 if(msg.what==100){37                     setProgressBarVisibility(false); // 执行完后使进度条隐藏38                     dialog.dismiss();39                     setTitle("更新完成");40                 }41             }42             43             44         };45         initViews();46         47     }48     49     private void initViews(){50         51         dialog= new ProgressDialog(MainrActivity.this);52         dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);53         dialog.setMax(100);54         Button bt = (Button)findViewById(R.id.bt);55         bt.setOnClickListener(new View.OnClickListener() {56             57             @Override58             public void onClick(View v) {59                 // TODO Auto-generated method stub60                 setProgressBarVisibility(true);61                 dialog.show();62                 exec();63             }64         });65         66         tv  = (TextView)findViewById(R.id.tv);67         68         69         70     }71     72     private void exec(){73         74         new Thread(new Runnable(){75 76             @Override77             public void run() {78                 // TODO Auto-generated method stub79                 for(int i=0;i<=100;i++){80                     81                     handler.sendEmptyMessage(i);82                 }83             }84             85             86         }).start();87     }88 }
原创粉丝点击