20

AsyncTaskは、AndroidのUIスレッドと他のスレッドの間で同期するのに非常に便利です。そのため、ソースコードを読み、Java Classic(JDK)に移植しようとしましたが、一部のクラスがJava(Message、Handler ..)に存在しないため、成功しませんでした。
AsyncTask(メインスレッドと他のスレッドの間で同期できる)のようないくつかの便利な関数を使用してクラスを作成したいと思います:

    doInBackground(Params... params)
    onProgressUpdate(Progress... values)
    onPostExecute(Result result)
    publishProgress(Progress... values)
    onPreExecute()
    onCancelled()

それを試す方法はありますか?

4

3 に答える 3

14

SwingWorkerに最も直接的なアナログであることに同意しましたAsyncTask

Swingを使用していない場合、別のオプションは次のとおりです。http ThreadPoolExecutor: //docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html

ThreadPoolExecutor複数のバックグラウンドスレッドを生成するために使用する方法を示す記事は次のとおりです。http ://www.javacodegeeks.com/2013/01/java-thread-pool-example-using-executors-and-threadpoolexecutor.html

進行状況の更新なしで実行および完了する単一のバックグラウンドスレッドの生成(これはAsyncTaskAndroidでの一般的な使用法でもあります)は、次のように簡単です。

Executors.newSingleThreadExecutor().execute(new Runnable() {
  @Override
  public void run() {
    // do stuff in background
  }
});
于 2014-02-18T17:57:24.690 に答える
13

1.Android AsyncTask用に特別に開発されたUIスレッドと非UIスレッドを同期します。これは痛みのないスレッドとしても知られています.....

2.Javaには。という名前のAsyncTaskの代替手段がありますSwingWorker

優れた基本的なチュートリアルについては、次のリンクを参照してください。

http://kodejava.org/how-do-i-use-swingworker-to-perform-b​​ackground-tasks/

于 2012-08-05T10:25:15.670 に答える
0

同様の状況でオブザーバーデザインパターンを使用します。バックグラウンドスレッドを生成した後、メインスレッドはスリープモードになります。バックグラウンドスレッドが非同期タスクを終了すると、コールバックメッセージでメインスレッドをウェイクアップします。これにより、基本的に、コールバックを待機していた同期オブジェクトのブロックが削除されます。

于 2017-01-19T18:55:13.547 に答える