2

新しい画面 (アクティビティ) を開くと、プログラムが新しい非同期タスクを開始し、X 間隔ごとに永久に実行されます。別のものが既に実行されている場合は、作成したくありません。

グローバル変数、共有設定フラグなどで多くのことを試しました。重複が開始されないように、AsyncTask を拡張してスレッド プールを 1 に変更する方法はありますか?

または、この問題に対するより明白な解決策はありますか?

注: 環境設定の問題は、デバイスを再起動すると、実行中のタスクが存在しないことを示すフラグが永続的な「true」に保存され、新しいタスクの実行が妨げられる可能性があることです。

そんなことをしようとする私は愚かですか??

4

3 に答える 3

2

Asynctask をフィールドに格納する

task =  new NewAsyncTask().execute();

終了したかどうかを毎回確認し、同じフィールドに新しい Asynctask を再割り当てします

if(task.getStatus() == AsyncTask.Status.FINISHED)
  task =  new NewAsyncTask().execute();
于 2012-09-01T02:13:00.370 に答える
1

毎秒バックグラウンドで何かを実行したい場合は、 Service または IntentService を使用する必要があります。実際、サービスを使用する場合、複数のサービスを作成しない限り、バックグラウンドで実行されるスレッドは常に 1 つだけであるため、スレッドの重複について心配する必要はありません。

于 2012-09-01T02:12:17.110 に答える
0

次のようなシングルトン パターンを使用します。

public class SingletonTask extends AsyncTask {
  private static SingletonTask instance;

  public static startTask(params, callback) {
    if (instance == null) {
      instance = new SingletonTask(params, callback);
      instance.execute();
    }
  }
  ....

  onPostExecute() {
    instance = null;
  }
}

次に、アクティビティから を呼び出すだけSingletonTask.startTask(...)です。

免責事項: その場で入力すると、コンパイルされません。

于 2012-09-01T02:33:44.907 に答える