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 }
Androidの多线程之更新ui(Thread+Handler+Message)相关推荐
- Androidの多线程之更新ui(AsyncTask)
AsyncTask 构造(泛型参数) 外部步骤: AsyncTask task = new AsyncTask<params,values,result>(); task.exec(par ...
- Android多线程----异步消息处理机制之Handler
虽然是国庆佳节,但也不能停止学习的脚步,我选择在教研室为祖国母亲默默地庆生. 关于Android的多线程知识,请参考本人之前的一篇博客:Android 多线程----AsyncTask异步任务详解 在 ...
- Android多线程界面更新方法的总结
Android多线程与界面交互的方法 Activity.runOnUiThread(Runnable) View.post(Runnable),View.postDelay(Runnable,long ...
- Android子线程更新UI的方法总结
消息机制,对于Android开发者来说,应该是非常熟悉.对于处理有着大量交互的场景,采用消息机制,是再好不过了.有些特殊的场景,比如我们都知道,在Android开发中,子线程不能更新UI,而主线程又不 ...
- android动画如何更新UI(ValueAnimator源码解析)
概述 android动画经常会碰到卡顿,或者阻塞主进程之类的问题. 为了排查此类问题,不得不对动画原理了解一二,于是作此文. 此文围绕两个主线问题展开: ui更新的频率是如何控制的? 比如,1秒内会更 ...
- java 更新ui_你怎么解决Android开发中更新UI报错的异常吗-百度经验
执行上述代码. 在App中点击"变透明"的按钮后,App就退出了. logcat中打印了这个错: 03-20 14:47:31.326 11640-11796/com.exampl ...
- ANDROID 学习笔记(三) UI THREAD AsyncTask 使用
为什么80%的码农都做不了架构师?>>> 一般获取验证码,用户登录验证,上传头像,获取消息,发消息,评论 都可以使用 1.先上官网实例代码 private class Down ...
- Android多线程UI更新-Handler
Handler 处理程序允许您发送和处理Message与线程关联的可运行对象MessageQueue.每个 Handler 实例都与单个线程和该线程的消息队列相关联.当你创建一个新的 Handler ...
- Android多线程源码学习笔记一:handler、looper、message、messageQueue
最近在学习Android多线程相关知识的源码,现在把自己的笔记整理一下,写出来加深印象. Android多线程通讯的核心是handler.looper.message.messageQueue,这篇文 ...
最新文章
- 上帝和面向对象的七天
- 2020春季学期作业提交统计处理
- HTTP相关知识 - 1
- python 制作gif-利用Python如何制作好玩的GIF动图详解
- asp.NET自定义服务器控件内部细节系列教程五
- ios 容错处理JKDataHelper和AvoidCrash
- P2662 牛场围栏(同余最短路)
- u-boot与bootloader及其区别
- 架构设计系列(一)——架构设计概述
- 国内人气设计师交流平台集设
- 利用大数据构建智能交通
- Wget漏洞(CVE-2016-4971)利用方式解析
- web重启tomcat_使用docker构建jdk镜像和web服务镜像
- Java 核心技术点之注解
- 图像上采样和图像下采样
- C# list集合 重复元素 索引_Python列表(List)
- 还担心学习AI没有数学基础吗?读完它们,你就有了!!!
- Python 十六进制数与ascii码的转换
- 桌面宠物秀,电脑桌面美化
- 软件的高可用性、可扩展性和高性能