Android开发之使用Handler刷新UI控件
一、为什么必须使用Handler
线程安全问题
这个问题要理解的话很容易,如果没有这个约束,那么同时有两个线程对一个UI控件进行调整,
那么控件自然就没法正常的工作,而为了解决这种二义性(就是一个东西同时被多个使用者使用,
从而无法判断按哪个使用者来调整)。而Handler永远都是在UI主线程,这就意味着对一个控件的修
改永远只会有一个线程,不会存在多个线程同时修改一个控件。统一管理
通过Handler可以统一进行对UI的管理,因为Handler采用消息处理的机制。简单理解就是另
一个线程发送一个编号给消息所在的线程,那么该线程的消息处理程序就会收到该消息并进行处理,
而消息采用int类型,所以int能够表示多少种数字就以为着有多少消息可以给你使用(因为存在系统
的消息,所以可能有一部分被系统的消息占有,而不能使用)。
二、Handler介绍
handleMessage(Message msg)
需要重写的方法,该方法为处理消息的核心函数。
sendEmptyMessage(int what)
发送指定的消息,该方法为仅仅只是传递一个int值来表示发送的消息类型。
三、重写handleMessage(Message msg)
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
//获得通过handler.sendEmptyMessage发送的消息编码
int what = msg.what;
/* 处理代码 */
}
}
四、使用handler发送消息
handler.sendEmptyMessage(0x101);
五、实例
- 新建一个线程来给主线程发送消息
public class MainActivity extends Activity{
private static final int send_msg_code = 0x101; Handler handler = new Handler(){
@Override
public void handleMessage(Message msg){
int what = msg.what;
if(what == send_msg_code){
Toast.makeText(MainActivity.this,"成功",Toast.LENGTH_SHORT).show();
}
}
} @Override
protected void onCreate(Bundle savedInstanceState)
{
new Thread(new Runnable(){
handler.sendEmptyMessage(send_msg_code);
}).start();
}
}
六、扩展
post(Runnable r)
将r加入到消息队列中(其实就是利用UI主线程执行一段代码,这样可以随时在其他线程中调整控件)
postDelayed(Runnabled r,long delayMillis)
将r加入到消息队列中,并在指定时间之后触发(单位为毫秒)
removeMessages(int what)
取消消息的发送
sendMessages(Message msg)
通过Message发送消息(这样可以将数据包装进去,一起发送过去)
Android开发之使用Handler刷新UI控件的更多相关文章
- Android开发(21)--有关Spinner控件的使用说明
下拉列表 Spinner,Spinner是一个每次只能选择所有项的一个项的控件.它的项来自于与之相关联的适配器中. Spinner的使用,可以极大提高用户的体验性.当需要用户选择的时候,可以提供一个下 ...
- Android开发(二)——自定义圆形控件的使用CircleImageView
CircleImageView,a fast circular ImageView perfect for profile images. 主要的类CircleImageView: package d ...
- android自己定义刷新类控件
android尽管定义了种类很丰富的控件.可是有的时候这些自己定义的控件还是不能满足我的要求,为了可以适配很多其它的需求,我们须要在原有的基础上进行自己定义控件. 今天我向大家介绍的就是android ...
- 安卓学习之--UI控件用法 单选 按钮 下拉框
1.单选 .RadioGroup 可将各自不同的RadioButton ,设限于同一个Radio 按钮组,同一个RadioGroup 组里的按钮,只能做出单一选择(单选题). <RadioGro ...
- iOS 使用UI控件的外观协议UIAppearance进行设置默认UI控件样式
在iOS开发中,经常会对UINavigationBar的样式进行全局样式.采用的设置方式有两种: 第一种,采用方式如下: [UINavigationBar appearance] 这种是对一类对象的默 ...
- ANDROID L——Material Design详解(UI控件)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...
- [Android] Android开发优化之——对界面UI的优化(2)
在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多 ...
- [Android] Android开发优化之——对界面UI的优化(1)
在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的.界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局.通常,在这个页面中会用到很多 ...
- Android UI控件常用库汇总
现在App的开发已经是非常成熟,涌现了一大批开源的工具.这些项目能够提高我们的搬砖效率.以下是一些在开发中比较常使用的控件和库. ListView WaveSwipeRefreshLayout 水滴效 ...
随机推荐
- Orchard之在前台显式一个属于自己的列表
一:当前现状 Orchard 并不提供筛选 Owner 的 Query,但是 Gallery 中有提供,那就是:Owner Queries. Install 之,然后在解决方案中引入该 Project ...
- Qt中对QDomDocument和QDomnode的理解
一.对QDomDocument和QDomnode的理解 QDom前缀的都是代表节点类型.所以有,QDomElement代表一个Element节点,而QDomText代表一个Text节点.QDomNod ...
- 关于XSHM(Cross-Site History Manipulation)
http://blog.chinaunix.net/uid-27070210-id-3255407.html 乍一看,好像和以前 css history hack 差不多,其实原理还是不一样的.浏览器 ...
- eclipse 创建聚合maven项目
本人不想花太多时间去排版,所以这里排版假设不好看,请多多包涵! 一直都在用maven,可是却基本没有自己创建过maven项目,今天也试着创建一个. 1.打开eclipse.然后new,other,然后 ...
- 开启Remote Desktop的PowerShell
1) Enable Remote Desktop set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Ser ...
- 免费桌面视频录像工具OBS的简单操作介绍
本帖最后由 felix0911 于 2014-5-21 09:32 编辑 0起点,傻瓜操作,为什么不尝试录制一个自己的游戏视频,来展现自己牛逼风骚的操作呢?(本教学不包括后期制作,特效背景音乐等部分) ...
- android bundle 对象 序列化
Android使用Intent.putSerializable()进行数据传递,或者使用Bundle进行数据传递,实质上都是进行的Serializable数据的操作,说白了都是传递的原数据的一份拷贝, ...
- 用keras实现lstm 利用Keras下的LSTM进行情感分析
1 I either LOVE Brokeback Mountain or think it’s great that homosexuality is becoming more accept ...
- Cognos11中Dashboard和HTML页面的简单集成
一.需求 之前很多第三方的程序都是通脱URL的形式可以和cognos Report进行集成,在我前几天的博文<Cognos11中通过URL访问report的设置>一篇中也提到了普通repo ...
- 如何屏蔽ctrl + v 粘贴事件,鼠标右键粘贴事件
通常在自己的APP里的密码框,验证码框需要屏蔽复制,粘贴,怎么办呢? 有三种方法: 1 hook 此方法是最完全的,但由于hook是全局的,容易影响到其它代码. 2 子类化文本框, 重写OnPaste ...