[英]Why is my countdown timer in Android so slow?
我正在嘗試在Android中制作倒數計時器,用於小型Android應用程序。 該應用程序將從幾秒鍾倒計時到0,然后它將執行一些操作。 我正在使用android.os.countdowntimer提供的coundowntimer。 這是我的代碼:
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.quizlayout);
new CountDownTimer(30000, 1000) {
TextView tx = (TextView) findViewById(R.id.textView2);
public void onTick(long millisUntilFinished) {
tx.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
tx.setText("done!");
}
}.start();
}
但是,這個倒數計時器真的很慢。 計時器倒計時需要3個實時秒才能倒計時一秒鍾。 我想知道發生了什么事? 我上面的代碼或多或少直接從谷歌復制( CountDownTimer )
任何人都可以幫助我,因為我的計時器為什么這么慢,並提供一種方法來加快它的速度?
(編輯):我在模擬器上運行它,即intel atom x86。 我正在模仿android 2.3.3環境。
使用將發布相同runnable的處理程序。 這將消除額外線程的需要:
Handler handler=new Handler();
handler.postRunnable(... , 1000) ;
在runnable中,再次為同一個處理程序調用postRunnable(並添加何時停止的條件)。
無論ui更新性能如何,CountDownTimer效率都不高。 對於完美的ui更新,最好創建自定義倒計時。 我做了我自己,所以在這里。 它在我的應用程序上完美無瑕。
public abstract class CountDown {
int totalTime = 0;
int tickTime = 0;
Thread thread;
boolean canceled = false;
public CountDown(int totalTime,int tickTime){
this.totalTime = totalTime;
this.tickTime = tickTime;
}
public abstract void onTick();
public abstract void onFinish();
public void start(){
thread = new Thread(new Runnable() {
@Override
public void run() {
// Do in thread
canceled = false;
for (int elapsedTime = 0; elapsedTime < totalTime; elapsedTime += tickTime) {
if(!canceled){
onTick();
try {
thread.sleep(tickTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
break;
}
}
if(!canceled){
onFinish();
}
}
});
thread.start();
}
public void cancel(){
canceled = true;
}
}
請記住,每次你必須更新你的ui,調用runOnUiThread,否則你將有一個異常,你不是在處理程序而不是ui線程。 以下是如何在代碼中使用它,它與CountDownTimer完全相同,因此您只需重命名代碼中的行:
CountDown cDown = new CountDown(10000, 20) {
public void onTick() {
// Do something
}
public void onFinish() {
runOnUiThread(new Runnable() {
@Override
public void run() {
myButton.setImageDrawable(drawable);
}
});
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.