zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Outdated Kotlin Runtime
    安装 intelliJ idea 。 快速学会kotlin
    配置lambda
    kotlin 安装 使用
    android stuidio 导入项目问题。
    下载 ....aar jitpack.io 打不开。
    android studio 汉化包 美化包
    安卓架构 视频
    剑指offer-把二叉树打印成多行
    剑指offer-整数中1出现的次数(从1到n整数中1出现的次数)
  • 原文地址:https://www.cnblogs.com/bvin/p/2782803.html
Copyright © 2011-2022 走看看