Android笔记之handler

本文介绍了Android中Handler消息传递机制的重要性和使用场景,特别是在解决多线程与UI交互问题上的应用。Handler允许在线程A中发送消息并在线程B中处理,通过回调方式实现线程间通信。文中给出了两个实例,演示如何创建和使用Handler,包括发送消息、接收消息以及如何利用Handler实现任务延时执行。
摘要由CSDN通过智能技术生成

handler消息传递机制

Android的消息传递机制是一种形式的"事件处理",这种机制主要是为了android应用的多线程问题--android平台不允许Activity新启动的线程访问该Activity里的组件,这样就会导致启动新的线程无法动态改变界面组件的属性值.但实际android应用开发中,尤其是涉及动画游戏开发中,需要新启动的线程周期性地改变界面组件的属性,这需要借助于hander的消息传递机制来实现.(以上摘自其他资料)

其实在不同的组件之间如果需要数据的传递,handler也是一个非常不错的选择,比如一个service不断的向一个activity不断的更新数据,就可以采用handler来传递数据.

handler类简介

handler类的主要作用有两个:

1)在线程A中启动发送消息

2)在线程B中获取,处理消息.

值得注意的是该线程A和线程B不一定是在同一个类中的.

线程B中处理线程A中发送的消息,采用回调的方式来实现,

handler实用的实例

例1:

线程A:

Message msg = myHandler.obtainMessage(1);

msg.what = 1;
 Bundle bundle = new Bundle();
 bundle.putString("Information", "Service Send Data To FishActivity With Thread");
msg.setData(bundle);

myHandler.sendMessage(msg);


线程B:

private final Handler mHandler = new Handler()
  {
@Override
      public void handleMessage(Message msg)
      {
          switch (msg.what)
          {
          case 1:
          //mytest.setText(msg.getData().getString("test1"));
         Tem =  msg.getData().getString("Information");
         Log.e("GameViewOk", Tem);
              break;
          }
      }
  };

线程B中重写的了handleMessage是用来接收线程A中发来的消息的

线程A中首先给msg添加了'1'与线程B中'case  1'与之对应

线程A中的bundle是消息的载体,采用类似C++中map的键-值方式,其中Information是键,Service Send Data To FishActivity With Thread是值

线程B在收到消息后也是通过Information这个键得到值'Service Send Data To FishActivity With Thread'的.

例2:

巧妙的利用handler提供的方法完成其他功能:

比如完成一个任务的延时

new Handler().postDelayed(new Runnable()
{
@Override
public void run() 
{
Intent intent = new Intent(SplashActivity.this,
MainActivity.class);
startActivity(intent);
finish();
}
}, 1000);

postDelayed是handler类提供的一个有关延时的方法,在该例子中替代了定时器TimerTask.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值