アンドロイドにはスレッドを実行するAsyncTaskがあり、ポスト実行時にこのメソッドを使用してメインスレッドと再び対話できます。 javaにこれと同等のものがありますか?別のスレッド(doInBackground)でタイマーを実行しようとしています。時間が終了すると、メインシアードとやり取りしてサービスを再開できます(onPostExecuteはサービスを再開します)。asyncTask in java
答えて
私はAndroidデベロッパーではありませんしかし、私はそれが簡単にJavaの8にCompletableFutureを使用することによって実現することができると思います:
import java.lang.reflect.InvocationTargetException;
import java.util.concurrent.CompletableFuture;
import javax.swing.SwingUtilities;
public abstract class AsyncTask <Params, Progress, Result> {
protected AsyncTask() {
}
protected abstract void onPreExecute();
protected abstract Result doInBackground(Params... params) ;
protected abstract void onProgressUpdate(Progress... progress) ;
protected abstract void onPostExecute(Result result) ;
final void publishProgress(Progress... values) {
SwingUtilities.invokeLater(() -> this.onProgressUpdate(values));
}
final AsyncTask<Params, Progress, Result> execute(Params... params) {
// Invoke pre execute
try {
SwingUtilities.invokeAndWait(this::onPreExecute);
} catch (InvocationTargetException|InterruptedException e){
e.printStackTrace();
}
// Invoke doInBackground
CompletableFuture<Result> cf = CompletableFuture.supplyAsync(() -> doInBackground(params));
// Invoke post execute
cf.thenAccept(this::onPostExecute);
return this;
}
}
私は専門家ではありませんが、[Executors framework](http:// docs .oracle.com/javase/tutorial/essential/concurrency/executors.html)が既にJavaに組み込まれています。 –
私の目的は、Java 8のSwingsライブラリで動作するAsyncTaskと似た機能を持つクラスを与えることです。別のメソッドexecute(Params ... params、Executor executor)を定義できるので、間違いなくExecutorsフレームワークの一部として使用できます)。さらに、onPostExecuteと同様のコールバック/継続メカニズムは、Executorsフレームワークではサポートされていません。 –
@ TuanDo、代わりに単にSwingWorkerを使用してみませんか? –
あなた要するに
に合わせたソリューションは、java: run a function after a specific number of secondsを見てください。
あなたの目的のために、AsyncTask
は必要ありません。 AsyncTask
は、時間が必要なものを実行するためのものですが、そうしない方がいいでしょう(複雑な計算やインターネットからのデータの取得など)。それはあなたが待たなければならない問題を回避するためのものです。
代わりにやりたいことは、遅延を導入することです。あるいは、より正確には、遅れた後に何らかのアクションが発生するようにスケジュールする必要があります。 AsyncTask
のようなクラスを使用することもできますが、残念ですが、より複雑なコードになります。 AsyncTask
は、UIのコンセプト(UI =に接続されていることを、標準的なJava
ノートにAsyncTask
の
new java.util.Timer().schedule(
new java.util.TimerTask() {
@Override
public void run() {
// your code here
}
},
5000
);
等価:あなたは代わりにTimer
とTimerTask
で遅延実行のために調整されたクラスを、使用する必要がありますUIスレッドからのみ開始されるため)。一般的に非同期的に何かを実行するのではありません。
したがって、アンドロイドのAsyncTask
と最もよく一致するのは、JavaではSwingWorker
です。 SwingはJavaの標準UIフレームワークです。 UIスレッドを持つAndroidと同様の概念を持っています。 Swingでは、このスレッドはイベントディスパッチスレッドと呼ばれます。したがって、SwingWorker
のデザインもAsyncTask
と非常に似ています。 doInBackground()
メソッドであっても、両方のクラスで同じ名前を持ちます。一般で
非同期実行
あなたの条件は、UIに関連して、あなたはそれが非同期に実行させていくつかの時間のかかる操作を調達したいされていない場合は、実行プログラムを見てする必要があります。さまざまな目的のためにエグゼキュータを使用するさまざまな方法がありますので、これはこの回答の範囲を超えています。詳しい情報に関心がある場合は、Jakob Jenkov's tutorial on ExecutorServiceから始めてください。
- 1. progressDialog in AsyncTask
- 2. Dialog in AsyncTask onPreExecute()
- 3. android.os.NetworkOnMainThreadException in AsyncTask
- 4. AsyncTask in Custom EditText
- 5. Asynctask in service、onPostExecuteエラー
- 6. Java AsyncTaskの使用
- 7. Javaでasynctaskクラスを作成
- 8. Android Java AsyncTask isCancelled問題
- 9. BST in java in arrays
- 10. Java Android AsyncTask - いつAsyncTaskの実行が停止しますか?
- 11. readInt16()in c#vs readShort()in java
- 12. バーチャルジョイスティックin Java
- 13. Jsonオブジェクトin java
- 14. アニメーションin java
- 15. アサーションcompareTo in java
- 16. SVGイメージサイズin java
- 17. タイマーin android java
- 18. java.net、hanging in java
- 19. Visibility.GONE in Java
- 20. Sleep()in java(Android)
- 21. TRANSACTION in java + sqlite3
- 22. im2bw matlab in java?
- 23. preallocated memory in java
- 24. CharAt in Java 8
- 25. DrawLine in Java Swing
- 26. ArrayListソートin java
- 27. ブルートフォースin java
- 28. ソケットプログラミングin java
- 29. セルオートマトンin java
- 30. Grepコマンドin java
ExecutorService、ScheduledExecutorService、Timerを意味しますか? –
AsyncTaskだけ使用できます。 Androidはオープンソースを覚えています。 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/os/AsyncTask.java#AsyncTask –
@ Jdavis649「Oracleチュートリアル」を参照してください。 Executors](http://docs.oracle.com/javase/tutorial/essential/concurrency/executors.html)を参照してください。 –