android全局计时_Android实现计时与倒计时的5种方法

本文介绍了Android中实现计时与倒计时的5种方法:1) Timer与TimerTask,2) TimerTask与Handler,3) Handler与Message,4) Handler与Thread,5) Handler与Runnable。不同方法在UI线程交互和阻塞方面有所区别,适用于不同的场景需求。推荐在考虑UI线程阻塞时使用方法4,若交互要求不高则可选择方法2或3。
摘要由CSDN通过智能技术生成

方法一

Timer与TimerTask(Java实现)

publicclasstimerTaskextendsActivity{

privateintrecLen =11;

privateTextView txtView;

Timer timer = newTimer();

publicvoidonCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

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

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

}

TimerTask task = newTimerTask() {

@Override

publicvoidrun() {

runOnUiThread(newRunnable() {// UI thread

@Override

publicvoidrun() {

recLen--;

txtView.setText(""+recLen);

if(recLen <0){

timer.cancel();

txtView.setVisibility(View.GONE);

}

}

});

}

};

}

方法二

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

publicclasstimerTaskextendsActivity{

privateintrecLen =11;

privateTextView txtView;

Timer timer = newTimer();

publicvoidonCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

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

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

}

finalHandler handler =newHandler(){

@Override

publicvoidhandleMessage(Message msg){

switch(msg.what) {

case1:

txtView.setText(""+recLen);

if(recLen <0){

timer.cancel();

txtView.setVisibility(View.GONE);

}

}

}

};

TimerTask task = newTimerTask() {

@Override

publicvoidrun() {

recLen--;

Message message = newMessage();

message.what = 1;

handler.sendMessage(message);

}

};

}

方法三

Handler与Message(不用TimerTask)

publicclasstimerTaskextendsActivity{

privateintrecLen =11;

privateTextView txtView;

publicvoidonCreate(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);

}

finalHandler handler =newHandler(){

publicvoidhandleMessage(Message msg){// handle message

switch(msg.what) {

case1:

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线程)

publicclasstimerTaskextendsActivity{

privateintrecLen =0;

privateTextView txtView;

publicvoidonCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

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

newThread(newMyThread()).start();// start thread

}

finalHandler handler =newHandler(){// handle

publicvoidhandleMessage(Message msg){

switch(msg.what) {

case1:

recLen++;

txtView.setText(""+ recLen);

}

super.handleMessage(msg);

}

};

publicclassMyThreadimplementsRunnable{// thread

@Override

publicvoidrun(){

while(true){

try{

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

Message message = newMessage();

message.what = 1;

handler.sendMessage(message);

}catch(Exception e) {

}

}

}

}

}

方法五

Handler与Runnable(最简单型)

publicclasstimerTaskextendsActivity{

privateintrecLen =0;

privateTextView txtView;

publicvoidonCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.timertask);

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

handler.postDelayed(runnable, 1000);

}

Handler handler = newHandler();

Runnable runnable = newRunnable() {

@Override

publicvoidrun() {

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,综合了前几种方法的优点,是最简的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值