android使用线程计时器,计时器的Android线程

小编典典

在你的情况下,你正在使用线程。因此,你无法从ui线程以外的其他线程更新ui。所以你用runOnUithread。我建议你使用倒数计时器或处理程序。

1.CountDownTimer

这是另一个示例的链接。建议你检查倒计时计时器的链接。

倒数计时器,以分钟和秒为单位

例:

public class MainActivity extends Activity {

Button b;

TextView tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv = (TextView) findViewById(R.id.textView1);

b= (Button) findViewById(R.id.button1);

b.setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

startTimer(200000);

}

});

}

private void startTimer(long time){

CountDownTimer counter = new CountDownTimer(30000, 1000){

public void onTick(long millisUntilDone){

Log.d("counter_label", "Counter text should be changed");

tv.setText("You have " + millisUntilDone + "ms");

}

public void onFinish() {

tv.setText("DONE!");

}

}.start();

}

}

2.你可以使用 Handler

范例:

Handler m_handler;

Runnable m_handlerTask ;

int timeleft=100;

m_handler = new Handler();

m_handlerTask = new Runnable()

{

@Override

public void run() {

if(timeleft>=0)

{

// do stuff

Log.i("timeleft",""+timeleft);

timeleft--;

}

else

{

m_handler.removeCallbacks(m_handlerTask); // cancel run

}

m_handler.postDelayed(m_handlerTask, 1000);

}

};

m_handlerTask.run();

3.计时器

计时器在其他线程上运行。你应该在ui线程上更新ui。采用runOnUiThread

范例:

int timeleft=100;

Timer _t = new Timer();

_t.scheduleAtFixedRate( new TimerTask() {

@Override

public void run() {

runOnUiThread(new Runnable() //run on ui thread

{

public void run()

{

Log.i("timeleft",""+timeleft);

//update ui

}

});

if(timeleft>==0)

{

timeleft--;

}

else

{

_t.cancel();

}

}

}, 1000, 1000 );

2020-03-06

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值