免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1706 | 回复: 1
打印 上一主题 下一主题

android Handler [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-01 19:36 |只看该作者 |倒序浏览
android Handler







Handler基本概念:
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。
这种机制通常用来处理相对耗时比较长的操作。

使用一个例子简单的来介绍一下Handler。
示例1:一个应用程序中有2个按钮(start、end),当点击start按钮时,执行一个线程,这个线程在控制台输出一串字符串,并且每隔3秒再执行一次线程,直到点击end按钮为止,线程停止。
下图为这个应用程序的界面:



下图为执行程序时控制台的输出:



开发步骤:
1、 新建一个Android应用程序
2、 在布局文件中添加2个Button控件标签,并为其设置属性和值
3、 在Activity中,声明控件变量并根据id获得控件对象
4、 在Activity中,创建一个Handler对象
5、 在Activity中,创建一个Runnable对象
a) 以匿名内部类的方式
b) 将要执行的操作写在Runnable对象中的run()方法中
i. 打印出一句话
ii. 调用Runnable对象的postDelayed()方法
6、 在Activity中,编写start按钮需要的监听器,并绑定
a) 在这个监听器的Onclick()方法中,调用Handler的post()方法,将要执行的线程对象放到队列当中。
7、 在Activity中,编写end按钮需要的监听器,并帮定
a) 在这个监听器的Onclick()方法中,调用Handler的removeCallbacks ()方法,删除队列当中未执行的线程对象。
b)
下面是Activity的代码:

Java代码
  1. package  android.handler;   
  2.    
  3. import  android.app.Activity;   
  4. import  android.os.Bundle;   
  5. import  android.os.Handler;   
  6. import  android.view.View;   
  7. import  android.view.View.OnClickListener;   
  8. import  android.widget.Button;   
  9.    
  10. public   class  HandlerTest  extends  Activity {   
  11.     /** Called when the activity is first created. */   
  12.     private  Button startButton;   
  13.     private  Button endButton;   
  14.       
  15.     @Override   
  16.     public   void  onCreate(Bundle savedInstanceState) {   
  17.         super .onCreate(savedInstanceState);   
  18.         setContentView(R.layout.main);   
  19.         //根据id获得控件对象   
  20.         startButton = (Button)findViewById(R.id.startButton);   
  21.         endButton = (Button)findViewById(R.id.endButton);   
  22.         //为控件设置监听器   
  23.         startButton.setOnClickListener(new  StartButtonListener());   
  24.         endButton.setOnClickListener(new  EndButtonListener());   
  25.     }   
  26.       
  27.     class  StartButtonListener  implements  OnClickListener{   
  28.         public   void  onClick(View v) {   
  29.             //调用Handler的post()方法,将要执行的线程对象放到队列当中   
  30.             handler.post(updateThread);   
  31.         }   
  32.     }   
  33.       
复制代码
class  EndButtonListener  implements  OnClickListener{   
        public   void  onClick(View v) {   
            //调用Handler的removeCallbacks()方法,删除队列当中未执行的线程对象   
            handler.removeCallbacks(updateThread);   
        }   
           
    }   
      
    //创建Handler对象   
    Handler handler = new  Handler();   
    //新建一个线程对象   
    Runnable updateThread = new  Runnable(){   
        //将要执行的操作写在线程对象的run方法当中   
        public   void  run(){   
            System.out.println("updateThread" );   
            //调用Handler的postDelayed()方法   
            //这个方法的作用是:将要执行的线程对象放入到队列当中,待时间结束后,运行制定的线程对象   
            //第一个参数是Runnable类型:将要执行的线程对象   
            //第二个参数是long类型:延迟的时间,以毫秒为单位   
            handler.postDelayed(updateThread, 3000 );   
        }   
    };   
}   

论坛徽章:
0
2 [报告]
发表于 2012-03-01 22:26 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP