Android实现计时与倒计时的方法汇总

方法一

Timer与TimerTask(Java实现)

public class timerTask extends Activity{

private int recLen = 11;

private TextView txtView;

Timer timer = new Timer();

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

txtView = (TextView)findViewById(R.id.txttime);

timer.schedule(task, 1000, 1000); // timeTask

}

TimerTask task = new TimerTask() {

@Override

public void run() {

runOnUiThread(new Runnable() { // UI thread

@Override

public void run() {

recLen--;

txtView.setText(""+recLen);

if(recLen < 0){

timer.cancel();

txtView.setVisibility(View.GONE);

}

}

});

}

};

}

方法二

TimerTask与Handler(不用Timer的改进型)

public class timerTask extends Activity{

private int recLen = 11;

private TextView txtView;

Timer timer = new Timer();

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

txtView = (TextView)findViewById(R.id.txttime);

timer.schedule(task, 1000, 1000); // timeTask

}

final Handler handler = new Handler(){

@Override

public void handleMessage(Message msg){

switch (msg.what) {

case 1:

txtView.setText(""+recLen);

if(recLen < 0){

timer.cancel();

txtView.setVisibility(View.GONE);

}

}

}

};

TimerTask task = new TimerTask() {

@Override

public void run() {

recLen--;

Message message = new Message();

message.what = 1;

handler.sendMessage(message);

}

};

}

方法三

Handler与Message(不用TimerTask) 

public class timerTask extends Activity{

private int recLen = 11;

private TextView txtView;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

txtView = (TextView)findViewById(R.id.txttime);

Message message = handler.obtainMessage(1); // Message

handler.sendMessageDelayed(message, 1000);

}

final Handler handler = new Handler(){

public void handleMessage(Message msg){ // handle message

switch (msg.what) {

case 1:

recLen--;

txtView.setText("" + recLen);

if(recLen > 0){

Message message = handler.obtainMessage(1);

handler.sendMessageDelayed(message, 1000); // send message

}else{

txtView.setVisibility(View.GONE);

}

}

super.handleMessage(msg);

}

};

}

方法四

Handler与Thread(不占用UI线程)

public class timerTask extends Activity{

private int recLen = 0;

private TextView txtView;

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

txtView = (TextView)findViewById(R.id.txttime);

new Thread(new MyThread()).start(); // start thread

}

final Handler handler = new Handler(){ // handle

public void handleMessage(Message msg){

switch (msg.what) {

case 1:

recLen++;

txtView.setText("" + recLen);

}

super.handleMessage(msg);

}

};

public class MyThread implements Runnable{ // thread

@Override

public void run(){

while(true){

try{

Thread.sleep(1000); // sleep 1000ms

Message message = new Message();

message.what = 1;

handler.sendMessage(message);

}catch (Exception e) {

}

方法五

Handler与Runnable(最简单型)   

public class timerTask extends Activity{

private int recLen = 0;

private TextView txtView;

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

txtView = (TextView)findViewById(R.id.txttime);

handler.postDelayed(runnable, 1000);

}

Handler handler = new Handler();

Runnable runnable = new Runnable() {

@Override

public void run() {

recLen++;

txtView.setText("" + recLen);

handler.postDelayed(this, 1000);

}

};

}

计时与倒计时

方法1,方法2和方法3,都是倒计时

方法4,方法5,都是计时

计时和倒计时,都可使用上述方法实现(代码稍加改动)

UI线程比较

方法1,方法2和方法3,都是在UI线程实现的计时;

方法4和方法5,是另开Runnable线程实现计时

实现方式比较

方法1,采用的是Java实现,即Timer和TimerTask方式;

其它四种方法,都采用了Handler消息处理

推荐使用

如果对UI线程交互要求不很高,可以选择方法2和方法3

如果考虑到UI线程阻塞,严重影响到用户体验,推荐使用方法4,另起线程单独用于计时和其它的逻辑处理

方法5,综合了前几种方法的优点,是最简的

以上所述是小编给大家介绍的Android实现计时与倒计时的方法汇总值,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是 Android实现计时与倒计时的方法汇总 的全部内容, 来源链接: utcz.com/z/313880.html

回到顶部