Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >android Handler更新UI

android Handler更新UI

作者头像
水击三千
发布于 2018-02-27 09:22:01
发布于 2018-02-27 09:22:01
1.6K00
代码可运行
举报
文章被收录于专栏:水击三千水击三千
运行总次数:0
代码可运行

android中经常需要更新界面某个元素的值,但是在主线程中是不可以直接更新主线程的值。这里推荐通过handler机制来更新值。

一Handler的定义:

主要接受子线程发送的数据, 并用此数据配合主线程更新UI.           解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button, Android会分发事件到Button上,来响应你的操作。  如果此时需要一个耗时的操作,例如: 联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会收到Android系统的一个错误提示  "强制关闭".  这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现了来解决这个复杂的问题,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据,这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据)  , 把这些消息放入主线程队列中,配合主线程进行更新UI。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1     ProgressBar progressBar;
 2     ProgressBar progressBar2;
 3 
 4     private Handler handler1;
 5     private Handler handler=new Handler(){
 6         public void handleMessage(Message msg)
 7         {
 8             switch(msg.what)
 9             {
10             case 1:
11                 int currentProgress=progressBar.getProgress()+2;
12                 if(currentProgress>progressBar.getMax())
13                 {
14                 currentProgress=0;
15                 }
16                 progressBar.setProgress(currentProgress);
17                 break;
18             }
19         }
20     };
21     private int count;
22     private Runnable doundateProgress1 = new Runnable() {
23         
24         @Override
25         public void run() {
26             // TODO Auto-generated method stub
27         
28             }
29     
30         
31         };
32     private TimerTask timertask=new TimerTask() {
33         
34         @Override
35         public void run() {
36             // TODO Auto-generated method stub
37             Message message=new Message();
38             message.what=1;
39             handler.sendMessage(message);
40         }
41     };
42     
43     @Override
44     protected void onCreate(Bundle savedInstanceState) {
45         super.onCreate(savedInstanceState);
46         setContentView(R.layout.activity_main);
47         progressBar=(ProgressBar) findViewById(R.id.progressBar1);
48         progressBar2=(ProgressBar) findViewById(R.id.progressBar2);
49         Timer timer=new Timer();
50         timer.schedule(timertask, 0,1000);
51         handler1=new Handler();
52         handler1.postDelayed(new Runnable() {
53             
54             @Override
55             public void run() {
56                 // TODO Auto-generated method stub
57                 for (count = 0; count <= progressBar2.getMax();count++) {
58                     
59                     // TODO Auto-generated method stub
60                     progressBar2.setProgress(count);
61     
62         
63         
64             }
65             }
66         }, 10000);
67     }
68 
69     @Override
70     public boolean onCreateOptionsMenu(Menu menu) {
71         // Inflate the menu; this adds items to the action bar if it is present.
72         getMenuInflater().inflate(R.menu.main, menu);
73         return true;
74     }
75 
76     @Override
77     public boolean onOptionsItemSelected(MenuItem item) {
78         // Handle action bar item clicks here. The action bar will
79         // automatically handle clicks on the Home/Up button, so long
80         // as you specify a parent activity in AndroidManifest.xml.
81         int id = item.getItemId();
82         if (id == R.id.action_settings) {
83             return true;
84         }
85         return super.onOptionsItemSelected(item);
86     }

本例中分别通过timer和handler来更新ProgressBar的值。timer是java提供的定时器,它设置循环执行的间隔,可以设定重复执行和不重复执行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-11-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
读懂一本书
实际上,那些让你苦思冥想的问题——关于爱情、升职加薪、创业,大部分人都经历过。而且这些问题中的大部分都已经被人解决,写成了书。可以说,书是绝大部分问题的出口。所以,如果你正感到迷茫或焦虑,不妨开始读书
yeedomliu
2022/06/25
5060
读懂一本书
大模型时代,普通人的科研何去何从:读《一本书读懂AIGC》有感
最近,电子工业出版社送了我一本书:「《一本书读懂AIGC:ChatGPT、AI绘画、智能文明与生产力变革》」。不禁感叹:现在连写书都这么卷了!要知道,ChatGPT 于去年11月30日刚刚发布、距今仅4月有余。今日恰逢世界读书日,故写些读后感。 借用《百年孤独》的开头,我想写这样的句子: ❝ 许多年后,面对AI对人类的全面奴役,曾经的AI科研工作者将会想起他们第一次登录ChatGPT的那个遥远的下午。 ❞ 也曾无数次想借用电影“终结者”的故事: ❝ 回到过去,回到2022年11月29日,将保存有ChatG
博文视点Broadview
2023/05/06
1.5K0
大模型时代,普通人的科研何去何从:读《一本书读懂AIGC》有感
《如何有效阅读一本书》读书笔记
其实这里有一个取舍,针对同样的内容到底是手抄还是电子标签存档,尤其是现在碎片化时间越来越多,30分钟手抄记下1/3内容,电子版记下1/10内容,但是电子版的时间确是手抄的10倍,那么单位时间内哪个收获更多还是要看个人实践。目前我自己没有条件随时随地的记录甚至取出一本纸质的书籍,大部分情况下自己是在kindle上进行阅读,所以相关的笔记和标注都是基于kindle提供的方法。
有福
2018/08/28
5350
《如何有效阅读一本书》读书笔记
如何阅读一本书
这可能是我近几年读过的最啰嗦的一本好书了,说好是因为内容不错,但450字的篇幅差不多可以精简到100页,作者知道如何读书,肯定不懂如何更好的写书。
麦时
2019/07/22
4790
从作者的角度去阅读一本书-一种全新的阅读体验
最近在尝试和探索的新的学习方法,总体的感觉效率还是蛮高的,至少能够在短时间内有比较多的思考和产出,最近几天在进行类似的尝试,就是快速去阅读一本书,我的角度相比比较特别,我来简单阐述一下。
jeanron100
2021/09/24
4140
《跟演示大师学PPT》上架,我把十年经验写成一本书!
单击图片,长按直接购买 2010年,我开始与PPT结下了不解之缘。 2017年,我被电子工业出版社邀约写一本PPT的书,觉得沉淀还不够,所以重新开始梳理PPT的知识体系。 2019年10月,再次拜访电子工业出版社,我才决心重新执笔,要把这十年的PPT心得送给你。 写书前,我也一直思考读者真正需要什么样的书。 最初构思这本书的时候,我拟定的书名是《PPT从入门到差点儿放弃》 我当时想,要将十年的经验仅通过一本书传达出来,读者对PPT知识的渴望不够强烈的话,应该很容易放弃吧? 但我关于书名的构思被出版社一致
博文视点Broadview
2023/05/19
4460
《跟演示大师学PPT》上架,我把十年经验写成一本书!
2021年的第一本书,就从这里选!
2021年的第一本书, 就在这里选! 12月书讯,精彩来袭 临近年末,可能由于疫情的原因, 前几个月感觉就是一晃而过呀。 回顾2020这魔幻的一年,博文菌与你 一起追过新兴科技的浪潮, 一起探寻过大厂几十年的技术长征, 一起重温过经典之作的诞生, 一同见证过霸榜的高光时刻…… 今天,踩在2020的尾巴尖儿上 博文菌带来10本12月新书 打响最后时刻的技术节拍 文末参与互动赠书 新年好书提前收割 ▼ 本期书讯  1 《阿里云数字新基建系列:云原生操作系统Kubernetes》 2 《BPF之巅:洞悉
博文视点Broadview
2023/05/19
2510
2021年的第一本书,就从这里选!
一天读一本书的秘密
两本书里都给出了可以快速阅读的方法和步骤。他们有一些重合的地方,也各自有一些独特的观点。
杨熹
2018/12/14
5280
一本书读懂NFT,了解未来资产的第1站!
👆点击“博文视点Broadview”,获取更多书讯 作为Web3.0世界的一个基本构成元素,NFT在社交、游戏、金融、确权等领域发挥着作用。 2021年,在Web3.0圈内已经出现了“不管你的项目要做什么,你都需要先发行一个NFT”的现象。 到了2022年,发行创世NFT基本上成为Web3.0新项目上线的一个必备步骤。 不管你是想在DeFi、SocialFi、GameFi领域,还是想在Metaverse领域大展宏图,首先要做的都是发行创世NFT。 在Web3.0圈外,无论是在国外,还是在国内,大厂、品牌方
博文视点Broadview
2023/04/04
4110
一本书读懂NFT,了解未来资产的第1站!
一本书的结束和新生
记得在两年多前,我找到编辑小姐姐跟她说想写本自传。编辑问了下我的情况,说不建议这个年纪出自传。接下来我就在自己的博客上,偶尔写点工作上的思考和记录。
被删
2024/06/28
2925
一本书的结束和新生
一本书带你极速上手DeepSeek(文末送书)
朋友们,今年是不是被DeepSeek疯狂刷屏啦?看网友用它10分钟写完方案、半小时搞定数据分析,自己想试试却卡在“服务器繁忙,请稍后再试”的痛谁懂啊?
老_张
2025/06/08
1430
一本书带你极速上手DeepSeek(文末送书)
我精心挑选了18本给0岁运营的书单。
这18本运营相关的书籍, 到底值不值¥830? 看完肯定超值! ---- 《一胜九败》28 《史玉柱,我的营销心得》 42 《Facebook》 29 《参与感》 56 《需求》 64 《定位》 42 《商战》 42 《品牌命名》 50 《创意之道》 58 《文案训练手册》45 《引爆点》 36 《增长黑客》59 《统计数字会撒谎》28 《众包》69 《影响力》46 《互联网营销的本质点亮社群》 28 《无价》49 《免费》59 ---- ¥830 18本书,怎么看呢?我们合理安排下: 1、作为0岁运营,互
mixlab
2018/04/17
7760
《如何阅读一本书》总结
读书的一个流程分析: 以下是读书笔记 /Files/zgynhqf/如何阅读一本书.rar
用户1172223
2018/01/29
5890
《如何阅读一本书》总结
【每周一本书】之《数据驱动:从方法到实践》(文末有彩蛋)
【每周一本书】之《数据驱动:从方法到实践》(文末有彩蛋)
数据猿
2018/04/19
7180
【每周一本书】之《数据驱动:从方法到实践》(文末有彩蛋)
一本书读懂DeepSeek核心技术(文末送书)
2025年年初,DeepSeek 成为全球人工智能(AI)领域的焦点,其DeepSeek-V3 和DeepSeek-R1 版本在行业内引发了结构性震动。
老_张
2025/05/21
2860
一本书读懂DeepSeek核心技术(文末送书)
如何高效学习(错过就后悔版)
本文作者:yeedomliu,腾讯CSIG交付架构师 目录 1. 为什么要学习 2. 掌握这些方法,学渣也能成为学霸 3. 关于职场进阶的干货分享 4. 高效阅读的秘密都在这 5. 成为『时间管理大师』 为什么要学习 生存 拥有的『选项』越多,竞争中生存下来的可能性就越大 学习最基本的就是解决我们生存的问题。越是高效学习的人,他拥有选择的权利越多。在越来越激烈的职场竞争中,生存下来的概率也会越大 只要你学习的速度比时代的变化更快,那就不必担心会被时代所淘汰 赚钱 头部效应:成为一个领域头部就能得到最高价值的
腾讯大讲堂
2022/04/21
6360
如何高效学习(错过就后悔版)
鹅厂写码13年,我总结的程序员高效阅读方法论
上一篇文章《 10 本拍手叫绝的编程好书》中,我们为大家推荐了 10 本适合国庆长假阅读的经典好书。有读者朋友表示书都很好,但自己读书的时候总感觉效率不高,输入不多。为此,我们特别向腾讯内部的知识分享达人做了本期约稿,为大家分享一些他总结的程序员高效阅读经验,帮助大家提升获取知识的能力。
腾讯云开发者
2024/09/25
8K5
鹅厂写码13年,我总结的程序员高效阅读方法论
书单 | 突破技术瓶颈,从码农到工匠,一定要看看这几本书!
👆点击“博文视点Broadview”,获取更多书讯 有道无术,术尚可求也,有术无道,止于术。 要想突破编程的技术瓶颈,必须要懂点底层思维的道才行! 所以,本期书单分享给大家9本助你修炼底层内功的经典畅销书,希望可以帮助大家实现从码农到工匠的飞跃! ----  01 ▊《程序员修炼之道:通向务实的最高境界(第2版)》 [美] David,Thomas(大卫托马斯),Andrew,Hunt(安德鲁亨特) 著 云风 译 《从小工到专家》重磅新版 雄踞“全球程序员至爱书单”顶端 开发新兵走向卓越领袖
博文视点Broadview
2022/03/28
9790
35岁以上的大龄程序员们,后来都干什么去了?
知乎上有个话题叫做“程序员的悲哀是什么?”,有个高赞回复直戳大多数程序员的命门:“最大的悲哀就是以为自己挣到了很多钱,其实根本不懂怎么挣钱,随着年龄的增长,工作瓶颈越来越多,越来越容易受到歧视,却不知道怎么走下去!”
江一铭
2022/06/16
1.6K0
35岁以上的大龄程序员们,后来都干什么去了?
极简快速阅读:信息时代如何读一本书
读第二遍时,在掌握整体结构的基础上,我们要把精力主要放在细节上,有意识地找出对自己有用的部分
yeedomliu
2022/12/03
5080
极简快速阅读:信息时代如何读一本书
推荐阅读
相关推荐
读懂一本书
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验