Android开发之使用Handler刷新UI控件
2013-11-11 13:04
399 查看
一、为什么必须使用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 开发之道(10)Handler本质简析与使用实例
- android 开发:使用SwipeRefreshLayout实现下拉刷新
- Android开发学习之路-使用Handler和Message更新UI
- Android开发:Handler的使用(二)
- Android 应用软件开发(十)Handler使用
- 【转】Android开发中Handler的使用
- Android开发视频教程之十五(Handler的使用 二)
- Android使用handler实现简单的定时器,主线程每秒刷新UI
- Android开发:Handler的使用(三)
- Android开发使用Messenger及Handler进行通信的方法示例
- Android开发之使用Handler封装下载图片工具类(源码分享)
- Android开发(12)--多线程处理机制之Handler的使用方法
- Android开发之Handler的使用方法(源代码分享)
- Android开发使用UncaughtExceptionHandler捕获全局异常
- Android开发之道(10)Handler本质简析与使用实例
- 实例讲解Android多线程应用开发中Handler的使用
- Android 开发 —— Handler的使用
- 【Android开发】线程间通讯机制(基础篇)——Handler、Runnable、HandlerThread、AsyncTask的使用
- Android开发之Handler的使用