20

AsyncTask对于​​在 Android 中的 UI 线程和其他线程之间进行同步非常有用。所以我已经阅读了它的源代码并尝试移植到java经典(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,另一种选择是ThreadPoolExecutorhttp ://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. AsyncTask是专门为android开发的同步UI线程和Non-UI线程,也叫Painless threading .....

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 回答