`
signup009
  • 浏览: 11042 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

(转载)Android中Handler的使用方法——在子线程中更新界面

阅读更多

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

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

○ 在onCreate中创建Handler 
public class HandlerTestApp extends Activity { 
        Handler mHandler; 
        TextView mText; 
        /** Called when the activity is first created. */ 
       @Override 
       public void onCreate(Bundle savedInstanceState) { 
           super.onCreate(savedInstanceState); 
           setContentView(R.layout.main); 
           mHandler = new Handler();//创建Handler 
           mText = (TextView) findViewById(R.id.text0);//一个TextView 
       } 
     ○ 构建Runnable对象,在runnable中更新界面,此处,我们修改了TextView的文字.此处需要说明的是,Runnable对象可以再主线程中创建,也可以再子线程中创建。我们此处是在子线程中创建的。  
     Runnable mRunnable0 = new Runnable() 
    { 
                @Override 
                public void run() { 
                        // TODO Auto-generated method stub 
                        mText.setText("This is Update from ohter thread, Mouse DOWN"); 
                } 
    };

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

    private void updateUIByRunnable(){ 
          new Thread()  
         {  
               //Message msg = mHandler.obtainMessage();  
              public void run()  
             { 

                   //mText.setText("This is Update from ohter thread, Mouse DOWN");//这句将抛出异常 
                   mHandler.post(mRunnable0);  
             }  
         }.start();

     }

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

    用Message更新界面与Runnable更新界面类似,只是需要修改几个地方。
    ○ 实现自己的Handler,对消息进行处理

    private class MyHandler extends Handler 
    {

        @Override 
        public void handleMessage(Message msg) { 
            // TODO Auto-generated method stub 
            super.handleMessage(msg); 
            switch(msg.what) 
            { 
            case UPDATE://在收到消息时,对界面进行更新 
                mText.setText("This update by message"); 
                break; 
            } 
        } 
    }

    ○ 在新的线程中发送消息     
    private void updateByMessage() 
    { 
        //匿名对象 
         new Thread() 
         { 
                public void run() 
                { 
                    //mText.setText("This is Update from ohter thread, Mouse DOWN");

                    //UPDATE是一个自己定义的整数,代表了消息ID 
                    Message msg = mHandler.obtainMessage(UPDATE); 
                    mHandler.sendMessage(msg); 
                } 
         }.start(); 
    }

 

原文地址:http://blog.csdn.net/zhenyongyuan123/archive/2010/08/23/5832734.aspx

另,可参考

http://xtfncel.iteye.com/blog/663517

http://xtfncel.iteye.com/blog/663518

http://www.javafun.cn/viewthread.php?tid=1517

 

分享到:
评论

相关推荐

    Android项目设计与开发:Handler.ppt

    嵌入式Android项目设计与开发 第七章 多线程 ——(3)UI... 多线程 可以考虑在子线程中使用runOnUiThread重新载入UI线程,并干预活动界面的内容。 实验 目的:证实子线程修改UI线程是不可行的。 谢谢 请专家批评指正!

    Android开发与应用——张荣,原书配套课件

    5.2 控制视图界面的其他方法 5.2.1 代码控制视图界面 5.2.2 代码和XML联合控制视图界面 5.3 多界面的使用 5.3.1 使用Intent封装数据 5.3.2 使用Bundle封装数据 5.3.3 获取另一个界面返回结果 5.4 小...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID...

    Google Android SDK开发范例大全的目录

    4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——...

    Handler和AsyncTack

    这致使我们不能在Android的UI线程中执行一些费时的操作,如下载、刷新等。Android中只允许UI线程对Activity中的UI组件进行修改。不过我们有两种方式来优化这种麻烦的情况——Handler和AsyncTack。

    Google+Android+SDK开发范例大全

    2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色...

    Google Android SDK 开发范例大全01

    4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID...

    Google Android SDK 开发范例大全02

    4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID...

    Google Android sdk 开发范例大全 部分章节代码

    4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID...

    Google Android SDK开发范例大全(完整版)

    4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID...

    老罗android开发视频教程全集百度网盘下载

    Android以Java为编程语言,使接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个 Activity 类(class)负责创建视窗(window),一个活动中的Activity就是在 foreground(前景)模式,背景运行...

    android 多线程技术应用

    多线程案例——计时器 这个案例中,屏幕启动之后,进入如图所示的界面。 屏幕上有一个文本框用于显示逝去的时间,此外还有一个“停止计时”按钮。案例的用例图如图所示。 能够在屏幕上“实时地显示”时间的流逝,单...

Global site tag (gtag.js) - Google Analytics