android多线程计时器,用于定时器的Android线程

在您的情况下,您正在使用线程。因此,不能从除UI线程之外的线程更新UI。所以你用runOnUithread..我建议你用倒计时器或者手。

1.CountDownTimer

这是另一个例子的链接。建议您检查该链接的计数下计时器。

例子:public class MainActivity extends Activity {Button b; TextView tv;@Overrideprotected 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() { @Overridepublic 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.Timer

计时器运行在不同的线程上。您应该更新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 );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值