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

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

◆ 通过Runnable在子线程中更新界面的例子

  1. ○ 在onCreate中创建Handler
  2. 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在子线程中来更新界面

  1. 用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();
}

更多相关文章

  1. Android(安卓)Activity界面切换添加动画特效
  2. Android(安卓)拨号器的简单实现
  3. android用户界面之按钮(Button)教程实例汇
  4. 锁屏界面
  5. 浅析Android中的消息机制-解决:Only the original thread that cr
  6. Android之菜单总结
  7. Android异步消息机制之Handler
  8. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  9. Android使用Retrofit进行网络请求

随机推荐

  1. Xamarin Mono For Android(安卓)4.6.0700
  2. 十二、Android(安卓)UI开发专题
  3. Android(安卓)MVVM 解读 3. Android(安卓
  4. Android数据库使用(ORMLite)
  5. Android中图像变换Matrix的原理、代码验
  6. Android(安卓)双开沙箱 VirtualApp 源码
  7. Simple Guide for Porting Android(安卓)
  8. 在Windows XP下Eclipse中安装Android并配
  9. Android禁止横屏竖屏切换
  10. Android中单APK应用多进程