安卓中常使用定时器来实现计时的任务,而使用线程来实现耗时的操作,如何通过Handler进行消息处理,这里做一下总结。
一、安卓定时器
使用安卓定时器需要以下三步:
3.启动定时器
简要说一下上面三步提到的一些内容。
1.定时器任务(TimerTask)顾名思义,就是说当定时器到达指定的时间时要做的工作,这里是想Handler发送一个消息,由Handler类进行处理。
2. java.util.Timer.schedule(TimerTask task, long delay):这个方法是说,dalay/1000秒后执行task.只执行一次。
java.util.Timer.schedule(TimerTask task, long delay, long period):这个方法是说,delay/1000秒后执行task,然后进过period/1000秒再次执行task,这个用于循环任务,执行无数次,当然,你可以用timer.cancel();取消计时器的执行。
二、安卓里的线程
安卓实现线程有两种方式:
1、扩展java.lang.Thread类
Thread类代表线程类,它的两个最主要的方法是:
run()——包含线程运行时所执行的代码
Start()——用于启动线程
示例代码:
2、实现Runnable接口
示例代码:
三、Handler
handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),
它有两个作用:
(1)安排消息或Runnable 在某个主线程中某个地方执行
(2)安排一个动作在不同的线程中执行
Handler中分发消息的一些方法
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
以上post类方法允许你排列一个Runnable对象到主线程队列中,
sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.
四、为了实现线程问题,安卓提供了如下几种方案。
1、使用Handler实现线程之间的通信
2、Activity.runOnUiThread
3、View.post(Runable)、View.postDelayed(Runable,long)
4、Handler.post(Runnable)、Handler.postAtTime(Runnable,long)、Handler.postDelayed(Runnable,long)
5、使用异步任务(AsyncTask)
一、安卓定时器
使用安卓定时器需要以下三步:
1.定义定时器、定时器任务及Handler句柄
private final Timer timer = new Timer();
private TimerTask task;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//要做的事情
super.handleMessage(msg);
}
};
task = new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
3.启动定时器
timer.schedule(task, 2000, 2000);
简要说一下上面三步提到的一些内容。
1.定时器任务(TimerTask)顾名思义,就是说当定时器到达指定的时间时要做的工作,这里是想Handler发送一个消息,由Handler类进行处理。
2. java.util.Timer.schedule(TimerTask task, long delay):这个方法是说,dalay/1000秒后执行task.只执行一次。
java.util.Timer.schedule(TimerTask task, long delay, long period):这个方法是说,delay/1000秒后执行task,然后进过period/1000秒再次执行task,这个用于循环任务,执行无数次,当然,你可以用timer.cancel();取消计时器的执行。
二、安卓里的线程
安卓实现线程有两种方式:
1、扩展java.lang.Thread类
Thread类代表线程类,它的两个最主要的方法是:
run()——包含线程运行时所执行的代码
Start()——用于启动线程
示例代码:
public class Demo_For_Copy extends Activity
{
public Button button;
public Handler mHandler=new Handler()
{
public void handleMessage(Message msg)
{
switch(msg.what)
{
case 1:
button.setText(R.string.text2);
break;
default:
break;
}
super.handleMessage(msg);
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button=(Button)findViewById(R.id.button);
Thread thread=new Thread(new Runnable()
{
@Override
public void run()
{
Message message=new Message();
message.what=1;
mHandler.sendMessage(message);
}
});
thread.start();
}
}
2、实现Runnable接口
示例代码:
public class Title_Change_Demo extends Activity implements Runnable
{
public Button button;
public LinearLayout my_layout;
public Handler mHandler=new Handler()
{
public void handleMessage(Message msg)
{
switch(msg.what)
{
case 1:
button.setText(R.string.text2);
break;
default:
break;
}
my_layout.invalidate();
super.handleMessage(msg);
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button=(Button)findViewById(R.id.button);
my_layout=(LinearLayout)findViewById(R.id.my_layout);
Thread thread=new Thread(this);
thread.start();
}
@Override
public void run()
{
Message message=new Message();
message.what=1;
mHandler.sendMessage(message);
}
}
三、Handler
handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),
它有两个作用:
(1)安排消息或Runnable 在某个主线程中某个地方执行
(2)安排一个动作在不同的线程中执行
Handler中分发消息的一些方法
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
以上post类方法允许你排列一个Runnable对象到主线程队列中,
sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.
四、为了实现线程问题,安卓提供了如下几种方案。
1、使用Handler实现线程之间的通信
2、Activity.runOnUiThread
3、View.post(Runable)、View.postDelayed(Runable,long)
4、Handler.post(Runnable)、Handler.postAtTime(Runnable,long)、Handler.postDelayed(Runnable,long)
5、使用异步任务(AsyncTask)