Android--Handler的使用方法:在子线程中更新界面

简介:

本文主要介绍Android的Handler的使用方法。Handler可以发送Messsage和Runnable对象到与其相关联的线程的消息队列。每个Handler对象与创建它的线程相关联,并且每个Handler对象只能与一个线程相关联。

  1.     Handler一般有两种用途:1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器。2)线程间通信。在Android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息。当你创建子线程时,你可以再你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。

◆ 通过Runnable在子线程中更新界面的例子

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. 在onCreate中创建Handler  
  2. public class HandlerTestApp extends Activity {   
  3.         Handler mHandler;   
  4.         TextView mText;   
  5.         /** Called when the activity is first created. */   
  6.        @Override   
  7.        public void onCreate(Bundle savedInstanceState) {   
  8.            super.onCreate(savedInstanceState);   
  9.            setContentView(R.layout.main);   
  10.            mHandler = new Handler();//创建Handler   
  11.            mText = (TextView) findViewById(R.id.text0);//一个TextView   
  12.        }  

构建Runnable对象,在runnable中更新界面,此处,我们修改了TextView的文字.此处需要说明的是,Runnable对象可以再主线程中创建,也可以再子线程中创建。我们此处是在子线程中创建的。

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. Runnable mRunnable0 = new Runnable()   
  2.     {   
  3.                 @Override   
  4.                 public void run() {   
  5.                         // TODO Auto-generated method stub   
  6.                         mText.setText("This is Update from ohter thread, Mouse DOWN");   
  7.                 }   
  8.     };  


 创建子线程,在线程的run函数中,我们向主线程的消息队列发送了一个runnable来更新界面。

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. private void updateUIByRunnable(){   
  2.           new Thread()    
  3.          {    
  4.                //Message msg = mHandler.obtainMessage();    
  5.               public void run()    
  6.              {   
  7.   
  8.                    //mText.setText("This is Update from ohter thread, Mouse DOWN");//这句将抛出异常   
  9.                    mHandler.post(mRunnable0);    
  10.              }    
  11.          }.start();  
  12.   
  13.      }  

◆ 用Message在子线程中来更新界面

  1.     用Message更新界面与Runnable更新界面类似,只是需要修改几个地方。
[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. 实现自己的Handler,对消息进行处理  
  2.   
  3.     private class MyHandler extends Handler   
  4.     {  
  5.   
  6.         @Override   
  7.         public void handleMessage(Message msg) {   
  8.             // TODO Auto-generated method stub   
  9.             super.handleMessage(msg);   
  10.             switch(msg.what)   
  11.             {   
  12.             case UPDATE://在收到消息时,对界面进行更新   
  13.                 mText.setText("This update by message");   
  14.                 break;   
  15.             }   
  16.         }   
  17.     }  
  18.   
  19. 在新的线程中发送消息       
  20.     private void updateByMessage()   
  21.     {   
  22.         //匿名对象   
  23.          new Thread()   
  24.          {   
  25.                 public void run()   
  26.                 {   
  27.                     //mText.setText("This is Update from ohter thread, Mouse DOWN");  
  28.   
  29.                     //UPDATE是一个自己定义的整数,代表了消息ID   
  30.                     Message msg = mHandler.obtainMessage(UPDATE);   
  31.                     mHandler.sendMessage(msg);   
  32.                 }   
  33.          }.start();   
  34.     }  



转载:http://blog.csdn.net/chaoyu168/article/details/50914021

目录
相关文章
|
4月前
|
Android开发 数据安全/隐私保护 开发者
Android自定义view之模仿登录界面文本输入框(华为云APP)
本文介绍了一款自定义输入框的实现,包含静态效果、hint值浮动动画及功能扩展。通过组合多个控件完成界面布局,使用TranslateAnimation与AlphaAnimation实现hint文字上下浮动效果,支持密码加密解密显示、去除键盘回车空格输入、光标定位等功能。代码基于Android平台,提供完整源码与attrs配置,方便复用与定制。希望对开发者有所帮助。
|
4月前
|
XML Java Android开发
Android自定义view之网易云推荐歌单界面
本文详细介绍了如何通过自定义View实现网易云音乐推荐歌单界面的效果。首先,作者自定义了一个圆角图片控件`MellowImageView`,用于绘制圆角矩形图片。接着,通过将布局放入`HorizontalScrollView`中,实现了左右滑动功能,并使用`ViewFlipper`添加图片切换动画效果。文章提供了完整的代码示例,包括XML布局、动画文件和Java代码,最终展示了实现效果。此教程适合想了解自定义View和动画效果的开发者。
205 65
Android自定义view之网易云推荐歌单界面
|
4月前
|
Android开发 开发者
Android企业级实战-界面篇-3
本文是《Android企业级实战-界面篇》系列的第三篇,主要介绍分割线和条形跳转框的实现方法,二者常用于设置和个人中心界面。文章通过具体代码示例展示了如何实现这两种UI组件,并提供了效果图。实现前需准备`dimens.xml`、`ids.xml`、`colors.xml`等文件,部分资源可参考系列第一、二篇文章。代码中详细说明了布局文件的配置,如分割线的样式定义和条形跳转框的组件组合,帮助开发者快速上手并应用于实际项目中。
|
4月前
|
XML Android开发 数据格式
Android企业级实战-界面篇-2
本文为《Android企业级实战-界面篇》系列第二篇,主要介绍三个UI模块的实现:用户资料模块、关注与粉丝统计模块以及喜欢和收藏功能模块。通过详细的XML代码展示布局设计,包括dimens、ids、colors配置文件的使用,帮助开发者快速构建美观且功能齐全的界面。文章结合实际效果图,便于理解和应用。建议配合第一篇文章内容学习,以获取完整工具类支持。
|
4月前
|
算法 Java Android开发
Android企业级实战-界面篇-1
本文详细介绍了Android企业级开发中界面实现的过程,涵盖效果展示、实现前准备及代码实现。作者通过自身经历分享了Android开发经验,并提供了`dimens.xml`、`ids.xml`、`colors.xml`和`strings.xml`等配置文件内容,帮助开发者快速构建规范化的UI布局。文章以一个具体的用户消息界面为例,展示了如何使用线性布局(LinearLayout)和相对布局(RelativeLayout)实现功能模块排列,并附带注意事项及使用方法,适合初学者和进阶开发者参考学习。
|
4月前
|
消息中间件 Android开发
Android Handler的使用方式以及其机制的简单介绍
Handler 是 Android 中实现线程间通信的重要机制,可传递任意两线程数据。常用场景包括子线程向主线程(UI 线程)传递结果,以及主线程向子线程发送消息。其核心涉及四个类:Handler(发送/接收消息)、Message(消息载体)、MessageQueue(消息队列)和 Looper(消息循环泵)。基本流程为:Handler 发送 Message 至 MessageQueue,Looper 从队列中按 FIFO 取出并处理。
153 0
|
11月前
|
消息中间件 存储 Java
Android消息处理机制(Handler+Looper+Message+MessageQueue)
Android消息处理机制(Handler+Looper+Message+MessageQueue)
138 2
|
9月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
10月前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
262 8
|
10月前
|
API Android开发 iOS开发
深入探索Android与iOS的多线程编程差异
在移动应用开发领域,多线程编程是提高应用性能和响应性的关键。本文将对比分析Android和iOS两大平台在多线程处理上的不同实现机制,探讨它们各自的优势与局限性,并通过实例展示如何在这两个平台上进行有效的多线程编程。通过深入了解这些差异,开发者可以更好地选择适合自己项目需求的技术和策略,从而优化应用的性能和用户体验。

热门文章

最新文章