如何将AsyncTask从Android移植到java?

R4j*_*R4j 20 java multithreading android

AsyncTask对于UI线程和Android中的其他线程之间的同步非常有用.所以我已经阅读了它的源代码并尝试移植到java经典(JDK)但没有成功,因为java中没有一些类(Message,Handler ..).
我想创建一个类,其中包含一些有用的函数,如AsyncTask(可以在主线程和其他线程之间同步):

    doInBackground(Params... params)
    onProgressUpdate(Progress... values)
    onPostExecute(Result result)
    publishProgress(Progress... values)
    onPreExecute()
    onCancelled()
Run Code Online (Sandbox Code Playgroud)

有没有办法试试呢?

Sta*_*iel 14

同意这SwingWorker是最直接的模拟AsyncTask

如果您不使用Swing,另一个选项是ThreadPoolExecutor:http://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
  }
});
Run Code Online (Sandbox Code Playgroud)


Kum*_*tra 13

1. AsyncTask专门为Android开发同步UI线程和非UI线程,也称为无痛线程 .....

2. Java中有一种AsyncTask的替代命名为SwingWorker.

请参阅此链接以获得一个很好的基础教程

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