在activity内不可以直接使用定时器,因为定时器开辟了新的线程,而activity是主线程,两个线程进行通信所以用到handler
Handler工具类在多线程中有两方面的应用:
1、发送消息,在不同的线程间发送消息,使用的方法为sendXXX();。
android.os.Handler对象通过下面的方法发送消息的:
sendEmptyMessage(int),发送一个空的消息;
sendMessage(Message),发送消息,消息中可以携带参数;
sendMessageAtTime(Message, long),未来某一时间点发送消息;
sendMessageDelayed(Message, long),延时Nms发送消息。
2、计划任务,在未来执行某任务,使用的方法为postXXX();。
android.os.Handler对象通过下面的方法执行计划任务:
post(Runnable),提交计划任务马上执行;
postAtTime(Runnable, long),提交计划任务在未来的时间点执行;
postDelayed(Runnable, long),提交计划任务延时Nms执行。
首先要定义handler
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// handler处理消息
if (msg.what == 0) {
if(myService.flag==0.0){
//此处可以对activity组件进行操作
}else{
//此处可以对activity组件进行操作
}
}
}
};
定义定时器:
timer = new Timer();
// 定义计划任务,根据参数的不同可以完成以下种类的工作:在固定时间执行某任务,在固定时间开始重复执行某任务,重复时间间隔可控,在延迟多久后执行某任务,在延迟多久后重复执行某任务,重复时间间隔可控
timer.schedule(new TimerTask() {
@Override
public void run() {
Log.i("yao", Thread.currentThread().getName());
// 定义一个消息传过去
Message msg = new Message();
msg.what = 0;
handler.sendMessage(msg);
}
}, 1000, 1000);