1

アクションの実行中に表示される進行状況ダイアログがあります。

アクションが一定時間実行されていない場合は、ダイアログとアクションを閉じたいと思います。これを実装するにはどうすればよいですか?

現在、非同期アクションとダイアログを停止および開始する次の 2 つのメソッドがあります。

private void startAction()
{
    if (!actionStarted) {
        showDialog(DIALOG_ACTION);
        runMyAsyncTask();
        actionStarted = true;
    }
}

private void stopAction()
{
    if (actionStarted) {
        stopMyAsyncTask();
        actionStarted = false;
        dismissDialog(DIALOG_ACTION);
    }
}

つまり、タイムアウトになったときに次のようなことをしたい:

onTimesOut()
{
    stopAction();
    doSomeOtherThing();
}
4

2 に答える 2

1

Threadaまたは aを使用する必要があると思いますTimerTask。X 秒間一時停止し、タスクがまだ終了していない場合は、強制終了してダイアログを閉じます。

したがって、1つの実装は次のようになります。

private void startAction() {
    if (!actionStarted) {
        actionStarted = true;
        showDialog(DIALOG_ACTION); //This android method is deprecated
        //You should implement your own method for creating your dialog
        //Run some async worker here...
        TimerTask task = new TimerTask() {
            public void run() {
                if (!actionFinished) {
                    stopAction();
                    //Do other stuff you need...
                }
            }
        });
        Timer timer = new Timer();
        timer.schedule(task, 5000); //will be executed 5 seconds later
    }
}

private void stopAction() {
    if (!actionFinished) {
        //Stop your async worker
        //dismiss dialog
        actionFinished = true;
    }
}
于 2012-08-28T10:26:34.470 に答える
1

簡単なタイマーを作ることができます:

Timer timer = new Timer();
TimerTask task = new TimerTask() {

    @Override
    public void run() {
        stopAction();
    }
};

timer.schedule(task, 1000);
于 2012-08-28T10:21:35.653 に答える