我正在尝试在纯Java代码中复制Android的AsyncTask遵循的相同逻辑。
为此,我创建了抽象类AsyncTask来实现我的IAsynTask,基本上调用onPreExecute、doInBackground和onPostExecute,还创建了execute方法,在其中进行操作。
因此,要在我的登录过程中使用它,例如,我创建了扩展AsyncTask的LoginTask类,但与我想象中的不同,onPreExecute、doInBackground和onPostExecute的实现似乎并不是强制性的。我做错了什么?
接口:
public interface IAsyncTask {
public void onPreExecute();
public void doInBackground();
public void onPostExecute();
}
类:
public abstract class AsyncTask implements IAsyncTask{
public void onPreExecute() {
}
public void doInBackground(){
}
public void onPostExecute() {
}
public void execute() {
onPreExecute();
new Thread(new Runnable() {
@Override
public void run() {
doInBackground();
Platform.runLater(new Runnable() {
@Override
public void run() {
onPostExecute();
}
});
}
}).start();
}
}
[编辑]
在我关于JavaFX的问题中,我注意到许多新开发人员在处理线程方面遇到了问题。我想分享一下我为简化JavaFX线程管理所做的工作。我创建了一个基于Android中的AsyncTask类的AsyncTask类,以一种谦虚但有效的方式完成了与Android相同的任务。您可以在Github项目上找到更多信息。
Looper
和Handler
的源代码。据我了解,AsyncTask
只是一个Handler
的前端,而Handler
又依赖于Looper
。你的实现很可能基于一个SynchronousQueue<Runnable>
。http://docs.oracle.com/javase/1.6.0/docs/api/java/util/concurrent/SynchronousQueue.html - Philip Couling