如何将AsyncTask从Android移植到java?

时间:2012-08-05 09:24:24

标签: java android multithreading

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

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

有没有办法尝试?

3 个答案:

答案 0 :(得分:14)

同意SwingWorker与[{1}}

最直接相似

如果您不使用Swing,则另一个选项是AsyncTaskhttp://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

生成一个运行并完成而没有进度更新的后台线程(这也是Android中ThreadPoolExecutor的常见用法)可以简单如下:

AsyncTask

答案 1 :(得分:13)

1。 AsyncTask专为Android设计,用于同步UI线程和非UI线程,也称为无痛线程 ....

2. 在Java中有一个名为SwingWorker的AsyncTask替代方案。

请参阅此链接以获取一个不错的基本教程:

http://kodejava.org/how-do-i-use-swingworker-to-perform-background-tasks/

答案 2 :(得分:0)

我使用Observer设计模式来处理类似的情况。在产生后台线程后,主线程进入睡眠模式。当后台线程完成异步任务时,它会使用回调消息唤醒主线程。这实际上删除了等待回调的同步对象上的块。