簡體   English   中英

隨機時間延遲后如何執行動作? -安卓

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM