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