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.