實現(xiàn)定時器有很多種方式,在這里我簡單的介紹幾種方式
(1)使用Handler + Runnable的方式
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
//你要做的事
//......
System.out.println(Thread.currentThread().getName());
handler.postDelayed(runnable, 1000);
}
};
然后調(diào)用handler.post(runnable);就能啟動定時器,這里是每隔1s打印線程名字,從打印中我們可以知道,他并沒有另開線程,而是運行在UI線程當(dāng)中,當(dāng)你要取消定時器的時候,只需要調(diào)用handler.removeCallbacks(runnable)就可以了。
上面中有一個問題,有時候你會發(fā)現(xiàn)removeCallbacks有時候會失效,不能從消息隊列中移除,看下面的demo
圖:兩個按鈕,一個將Runnable加到消息隊列中,一個將Runnable從消息隊列中移除。該Runnable每1秒鐘打印一次日志。
<SPAN style="FONT-FAMILY: Courier New">package com.example.demoactivity;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class TimerActivity extends Activity{
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("update...");
handler.postDelayed(runnable, 1000);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.timer);
Button mButtonStart = (Button) findViewById(R.id.button1);
Button mButtonStop = (Button) findViewById(R.id.button2);
mButtonStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
handler.post(runnable);
}
});
mButtonStop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
handler.removeCallbacks(runnable);
}
});
}
}</SPAN><SPAN style="FONT-FAMILY: Georgia, 'Times new roman', Times, san-serif">
</SPAN>
結(jié)果:
(1)start
主站蜘蛛池模板:
花莲市|
星子县|
于都县|
青川县|
偏关县|
上杭县|
衡阳市|
江油市|
米易县|
重庆市|
德兴市|
安义县|
崇礼县|
万山特区|
郑州市|
凌源市|
若羌县|
九江县|
台北市|
嘉鱼县|
托里县|
肥城市|
清原|
揭东县|
綦江县|
永善县|
大埔县|
黄梅县|
沈丘县|
定日县|
淄博市|
平罗县|
米林县|
汤原县|
班玛县|
沧州市|
三亚市|
涟水县|
保定市|
石景山区|
固安县|