5

コードに thread.sleep とハンドラー postDelayed があります。

handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        Log.e(TAG, "I ran");
        mIsDisconnect = false;
    }
}, DISCONNECT_DELAY);

ハンドラーコードの後、ユーザーがボタンを押した後、次のようになります。

while (mIsDisconnect) {
    try {
        Thread.sleep(DELAY);
    } catch (InterruptedException e) {
        Log.e(TAG, "problem sleeping");
    }
}

ユーザーが十分に待つと、ログに「実行しました」と表示されます。しかし、遅延が発生する前にユーザーがボタンを押すと、postDelayed が実行される機会がないように見えます。私の質問は、thread.sleep() はハンドラー postDelayed を台無しにしますか?

編集:このコードの目的は、DISCONNECT_DELAY 秒が経過した後にのみプログラムを続行することです。したがって、ユーザーが早期にクリックした場合、経過時間が終了するまで待つ必要があります。

4

3 に答える 3

0

最良の方法は、センチネルを使用することです。

runnable = new Runnable() {
    @Override
    public void run() {

    // condition to pass (sentinel == 1)
        if (isActive == 0) {
            handler.postDelayed(this, 1000); // 1 seconds
        }
        else {
        // isActive == 1, we pass!

        // Do something aweseome here!

        }


     }
};
handler = new Handler();
handler.postDelayed(runnable, 100);
于 2016-06-27T15:12:38.410 に答える