三种常用的定时器
Handler mHandler = new Handler();
Runnable r = new Runnable() {
@Override
public void run() {
//do something
//每隔1s循环执行run方法
mHandler.postDelayed(this, 1000);
}
};
主线程中调用:
mHandler.postDelayed(r, 1000);//延时1000毫秒后启动
mHandler.removeCallbacks(r); //停止计时
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1){
//do something
}
super.handleMessage(msg);
}
};
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
主线程中调用:timer.schedule(timerTask,1000,500);//延时1s,每隔500毫秒执行一次run方法
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1){
//do something
}
super.handleMessage(msg);
}
};
class MyThread extends Thread {//这里也可用Runnable接口实现
@Override
public void run() {
while (true){
try {
Thread.sleep(1000);//每隔1s执行一次
Message msg = new Message();
msg.what = 1;
handler.sendMessage(msg);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
主线程中调用:new Thread(new MyThread()).start();
三种延时执行的快捷方法:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//do something
}
}, 1000); //延时1s执行
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
//do something
}
},1000);//延时1s执行
new Thread(new MyThread()).start();
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);//延时1s
//do something
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
范例:android源码一个猜数字游戏 猜大猜小带计时.rar
package com.example.guessgame;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.*;
public class MainActivity extends ActionBarActivity {
private final int TIME_ALL=20;
private int Time=TIME_ALL;
private TextView info;
private EditText input;
private Button button;
private int target;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
info = (TextView)findViewById(R.id.info);
input = (EditText)findViewById(R.id.input);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
if(button.getText().toString().equals("OK")){
mHandler.removeCallbacks(r); //停止计时
if(input.getText().toString().equals(""))
return;
int tmp = Integer.parseInt(input.getText().toString());
if(tmp == target){
info.setText("恭喜你,猜对了");
button.setText("再来一次!");
}
else if(tmp < target)
info.setText("猜小了,请重试");
else
info.setText("猜大了,请重试");
}
else
newGame();
}
});
newGame();
}
Handler mHandler = new Handler();
Runnable r = new Runnable() {
@Override
public void run() {
//do something
Time--;
if(Time==0)
{
info.setText("(计时"+TIME_ALL+"秒,当前:"+Time+"),你已经超时了。");
}
else if(Time>0)
{
info.setText("(计时"+TIME_ALL+"秒,当前:"+Time+")请输入1-100之间的数字:");
}
//每隔1s循环执行run方法
mHandler.postDelayed(this, 1000);
}
};
private void newGame(){
Time=TIME_ALL;
mHandler.postDelayed(r, 1000);//延时1000毫秒后启动
info.setText("(计时"+TIME_ALL+"秒,当前:"+Time+")请输入1-100之间的数字:");
input.setText("");
button.setText("OK");
target = (int)((Math.random())*99 + 1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}