计时器的Android线程

public class MainActivity extends Activity

{

int min, sec;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

min = 5;

sec = 0;

final TextView timer1 = (TextView) findViewById(R.id.timer1);

timer1.setText(min + ":" + sec);

Thread t = new Thread() {

public void run() {

sec-=1;

if (sec<0) {

min-=1;

sec=59;

}

timer1.setText(min + ":" + sec);

try

{

sleep(1000);

}

catch (InterruptedException e)

{}

}

};

t.start();

}

}

这是Java中Thread的代码,但是不起作用。你能帮助我吗?

它的计时器从5分钟倒数到0:00。

回答:

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

1.CountDownTimer

http://developer.android.com/reference/android/os/CountDownTimer.html

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

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

例:

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

以上是 计时器的Android线程 的全部内容, 来源链接: utcz.com/qa/406521.html

回到顶部