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


    流程:

    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     @Override
    22     public void onCreate(Bundle savedInstanceState) {
    23         super.onCreate(savedInstanceState);
    24         this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
    25         setContentView(R.layout.main);
    26         setSecondaryProgress(10000); //设置副进度为10000
    27         handler = new Handler(){
    28 
    29             @Override
    30             public void handleMessage(Message msg) {
    31                 // TODO Auto-generated method stub
    32                 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             @Override
    58             public void onClick(View v) {
    59                 // TODO Auto-generated method stub
    60                 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             @Override
    77             public void run() {
    78                 // TODO Auto-generated method stub
    79                 for(int i=0;i<=100;i++){
    80                     
    81                     handler.sendEmptyMessage(i);
    82                 }
    83             }
    84             
    85             
    86         }).start();
    87     }
    88 }
  • 相关阅读:
    简单说说数据库表设计的三种范式
    存储过程简单的动态订单号
    Asp.Net页面生命周期
    jq 小笔记,上传判断其格式
    吃一垫长一智
    离散事件模拟
    二叉树查找树
    冷暖自知
    基督徒的人生箴言
    迷宫寻路
  • 原文地址:https://www.cnblogs.com/bvin/p/2782803.html
Copyright © 2020-2023  润新知