[英]Android - How to perform an action until a Handler doesn't complete the delay
[英]How to perform an action after a Random Time Delay? - Android
所以我在“我不告訴你”上做一個應用程序... :-)
解決問題:
final ToggleButton passTog = (ToggleButton) findViewById(R.id.onoff);
passTog.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
init = System.currentTimeMillis();
handler.post(updater);
}
});
上面是一個普通的切換按鈕,我之前定義了一個處理程序,使用它我正在運行一個名為updater的Runnable ...(以下內容:“ display”是一個textview)
final Runnable updater = new Runnable() {
@Override
public void run() {
if (passTog.isChecked()) {
now = System.currentTimeMillis();
time = now - init;
display.setText(time + " ms");
handler.postDelayed(this, 30);
}
}
};
這是可運行的...可變時間,現在,init ...是時間變量。
我想做的是(現在)我正在使用自從按下“切換”按鈕以來經過的毫秒數來更新textview(請參見if語句)
上面的代碼說明
因此,活動開始,單擊切換按鈕,init變量獲取當前時間的值...程序進入可運行狀態。 現在,在仔細檢查按鈕是否處於“ on”狀態后,系統將當前時間設置為“ now”,然后將時間變量減去兩者。 並且每30毫秒會在textview“顯示”中對其進行更新。 在應用程序中,隨着時間的流逝,您可以看到textview的步調。 效果很好。
就是這樣,我想要的是...
活動開始,您按下按鈕。. 經過一段隨機延時*后說2-10秒鍾之間...。然后,textview應該開始更新。
我們按下一個按鈕,似乎沒有任何反應,然后經過隨機延遲... textview突然爆發,並開始從1ms開始攪動當前時間,也就是說,上述可運行時間應該在隨機延遲之后運行。
看來事情是完全合乎邏輯的,而不是真正的技術問題-我需要以某種方式引入一個非固定的時間延遲,然后再運行該東西。
我認為我們可以在runnable本身中做到這一點……我們已經有了“ time”變量。……為什么不在“ if”語句中使用它……然后重新設置time變量,以便它似乎是從頭開始的。
沉重的東西,我似乎無法正確解決。
知道我們該怎么做嗎?
簡單地延遲可運行對象的第一篇文章怎么樣?
public void onClick(View v) {
init = System.currentTimeMillis();
handler.postDelayed(updater, 2000+(new Random().nextInt(8000));
}
在最小2000ms和最大9999ms之后,TextView開始更新。 單擊按鈕后的初始化時間保持不變。 如果您還希望將初始化時間設為延遲時間,請嘗試以下操作:
public void onClick(View v) {
init = -1;
handler.postDelayed(updater, 2000+(new Random().nextInt(8000));
}
final Runnable updater = new Runnable() {
@Override
public void run() {
if (passTog.isChecked()) {
if(init == -1) init = System.currentTimeInMillis();
now = System.currentTimeMillis();
time = now - init;
display.setText(time + " ms");
handler.postDelayed(this, 30);
}
}
};
那是您想要實現的目標,還是我理解它錯了?
嘗試類似:
Thread t= new Thread(){
@Override
public void run(){
try {
sleep(1000);
} catch (InterruptedException e) {
}
finally {
performActionHere();
}
}
};
t.start();
new CountDownTimer(2000, 1000) {
//currently time delay is 2000 milliseconds
@Override
public void onFinish() {
// TODO Auto-generated method stub
runOnUiThread(new Runnable() {
@Override
public void run() {
// do your task here
}
});
}
@Override
public void onTick(long millisUntilFinished) {
}
}.start();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.