安卓开发中Handler的应用

在项目开发当中,当用户点击一个按钮时如果执行的是一个非常耗时的操作,处理不好很容易导致系统假死,用户体验很差,而Android开发当中则是,如果任意一个Acitivity没有响应5秒钟以上就会被强制关闭,因此我们需要另外起动一个线程来处理长耗时操作,而主线程则不受其影响,在耗时操作完结发送消息给主线程,主线程再做相应处理。那么线程之间的消息传递和异步处理用的就是Handler。它的主要用途大致是下面两个:
1)按计划发送消息或执行某个Runnanble;
2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程);
Handler中分发消息的一些方法有:post(Runnable)、postAtTime(Runnable,long)、postDelayed(Runnable long)、sendEmptyMessage(int)、sendMessage(Message)、sendMessageAtTime(Message,long)、sendMessageDelayed(Message,long)
以一个应用程序中有2个按钮(start、end),当点击start按钮时,执行一个线程,这个线程在控制台输出一串字符串,并且每隔3秒再执行一次线程,直到点击end按钮为止,线程停止为实例代码编写如下:

package android.handler;      

import android.app.Activity;      
import android.os.Bundle;      
import android.os.Handler;      
import android.view.View;      
import android.view.View.OnClickListener;      
import android.widget.Button;      

public class HandlerTest extends Activity {      
    /** Called when the activity is first created. */     
    private Button startButton;      
    private Button endButton;      

    @Override     
    public void onCreate(Bundle savedInstanceState) {      
        super.onCreate(savedInstanceState);      
        setContentView(R.layout.main);      
        //根据id获得控件对象      
        startButton = (Button)findViewById(R.id.startButton);      
        endButton = (Button)findViewById(R.id.endButton);      
        //为控件设置监听器      
        startButton.setOnClickListener(new StartButtonListener());      
        endButton.setOnClickListener(new EndButtonListener());      
    }      

    class StartButtonListener implements OnClickListener{      
        public void onClick(View v) {      
            //调用Handler的post()方法,将要执行的线程对象放到队列当中      
            handler.post(updateThread);      
        }      
    }      

    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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值