Android Handler消息传递机制

 今天介绍一下Android的消息传递机制Handler,Handler是另一种形式的“事件处理”,这种机制主要是为了解决Android应用的多线程问题---Android平台不允许Activity新启动的线程访问该Activity里的界面组件,这样就会导致新启动的线程无法动态改变界面组件的属性值。

  Handler类主要有两个作用:

   在新启动的线程中发送消息;

   在主线程中获取、处理消息。

  Handler类包含如下方法用于发送、处理消息:

    voidhandlerMessage(Message msg):处理消息的方法,该方法通常用于被重写。

    finalboolean hasMessage(int what):检查消息队列中是否包含what属性为指定值的消息。

    finalboolean hasMessage(int what,Objectobject):检查消息队列中是否包含what属性为指定值且object属性为指定对象的消息。

   多个重载的Message obtainMessage():获取消息。

   sendEmptyMessage(int what):发送空消息。

    finalboolean sendEmptyMessageDelayed(int what,longdelayMillis):指定多少毫秒之后发送空消息。

    finalboolean sendMessage(Message msg):立即发送消息。

    finalboolean sendMessageDelayed(Message msg,longdelayMillis):指定多少毫秒之后发送消息。

 下面看个实例,该实例通过一个新线程来周期性地修改ImageView所显示的图片,直接上代码:

public class HandlerTest extends Activity
{
 //定义周期性显示的图片的ID
 int[] imageIds = new int[]
 {
  R.drawable.java,
  R.drawable.ee,
  R.drawable.ajax,
  R.drawable.xml,
  R.drawable.classic  
 };
 int currentImageId = 0;
 @Override
 public void onCreate(BundlesavedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  final ImageView show =(ImageView)findViewById(R.id.show);  
  final Handler myHandler = newHandler()
  {
   @Override
   public voidhandleMessage(Message msg)
   {
    //如果该消息是本程序所发送的
    if(msg.what == 0x1233)
    {
     //动态地修改所显示的图片
     show.setImageResource(imageIds[currentImageId++]);
     if(currentImageId >= 4)
     {
      currentImageId= 0;
     }
    }
   }
  };
  //定义一个计时器,让该计时器周期性地执行指定任务
  new Timer().schedule(newTimerTask()
  {
   @Override
   public voidrun()
   {
    //新启动的线程无法访问该Activity里的组件
    //所以需要通过Handler发送信息
    Messagemsg = new Message();
    msg.what= 0x1233;
    //发送消息
    myHandler.sendMessage(msg);
   }
  }, 0 , 800);
 }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值