4

が途中で AsyncTask を実行しているときにアクティビティを終了すると、そのアクティビティを再度開始しようとすると、新しい AsynTask が開始される前に、前の AsyncTask が終了するまで待たなければならないことがわかりました。thread.sleep と systemclock.sleep の両方を試しましたが、同じ結果が得られました。閉じたスレッドと開いたスレッドは同じだと思うので、これは理にかなっています。ユーザーがアクティビティを終了した場合に AsyncTask をキャンセルする方法はありますか? ユーザーが同じアクティビティを 2 回目に入力するときは、前のアクティビティが終了するまで待つ必要がないためです。onPause() で ayntask.cancel(true) を試しましたが、機能しません。同じことが起こりました。

4

1 に答える 1

7

私が理解しているように、Thread.sleep() と SystemClock.sleep() の唯一の違いは、Thread.sleep() を中断できることです。つまり、次のようなものです。

SystemClock.sleep(10*1000);

呼び出し元のスレッドを 10 秒間スリープさせます。あとは待つだけです。一方:

Thread.sleep(10*1000);

また、呼び出しスレッドを 10 秒間スリープさせます。ただし、別のスレッドからスリープ状態のスレッドへの参照がある場合は、次のようなオプションがあります。

sleepingThread.interrupt();

これにより、sleepThreadが 10 秒のスリープから効果的に目覚めます。

あなたの質問の文脈では、AsyncTaskの方が優れていますが、それでも完全にあなたの要件次第だと思います。もちろん、正確なコードはわかりませんが、タスクの doInBackground が明らかにスリープ状態にあり、任意の時間にタスクをキャンセルできるようにしたい場合、 Thread.sleep() の方が理にかなっています。

于 2012-09-06T15:42:37.890 に答える