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

目录
相关文章
|
17天前
|
Java 数据库 Android开发
【专栏】Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理
【4月更文挑战第27天】本文探讨了Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理。通过案例分析展示了网络请求、图像处理和数据库操作的优化实践。同时,文章指出并发编程的挑战,如性能评估、调试及兼容性问题,并强调了多线程优化对提升应用性能的重要性。开发者应持续学习和探索新的优化策略,以适应移动应用市场的竞争需求。
|
21天前
|
消息中间件 网络协议 Java
Android 开发中实现数据传递:广播和Handler
Android 开发中实现数据传递:广播和Handler
17 1
|
2月前
|
Java 调度 Android开发
构建高效Android应用:探究Kotlin多线程编程
【2月更文挑战第17天】 在现代移动开发领域,性能优化一直是开发者关注的焦点。特别是在Android平台上,合理利用多线程技术可以显著提升应用程序的响应性和用户体验。本文将深入探讨使用Kotlin进行Android多线程编程的策略与实践,旨在为开发者提供系统化的解决方案和性能提升技巧。我们将从基础概念入手,逐步介绍高级特性,并通过实际案例分析如何有效利用Kotlin协程、线程池以及异步任务处理机制来构建一个更加高效的Android应用。
|
4月前
|
Java 调度 数据库
Android 性能优化: 如何进行多线程编程以提高应用性能?
Android 性能优化: 如何进行多线程编程以提高应用性能?
59 0
|
4月前
|
安全 Android开发 开发者
【Android开发小技巧】扔掉这坑人的 Handler
【Android开发小技巧】扔掉这坑人的 Handler
42 0
|
4天前
|
Android开发
定制Android关机界面
定制Android关机界面
|
5天前
|
安全 API 数据库
【转】Android线程模型(AsyncTask的使用)
【转】Android线程模型(AsyncTask的使用)
|
7天前
|
Linux Android开发
Android开机不显示bootloader界面
Android开机不显示bootloader界面
9 0
Android开机不显示bootloader界面
|
7天前
|
Android开发
Android SystemUI去掉拖动亮度条QSPanel界面隐藏功能
Android SystemUI去掉拖动亮度条QSPanel界面隐藏功能
9 0
|
8天前
|
Android开发
Android Service的两种使用方法
Android Service的两种使用方法
15 2