说我有一个活动在屏幕上显示一些内容。我需要异步执行一些方法(asyncMethod),当它完成后,我需要在屏幕上更新数据。什么是最正确和最简单的方法?
目前我所知道的最简单的方法是使用线程:
new Thread(new Runnable() {
public void run() {
asyncMethod();
}
}).start();
我熟悉AsyncTask,但它比使用线程更复杂,而且我需要异步运行的每个方法都需要创建新的AsyncTask,这会大大增加代码大小。
我想到了一些通用的AsincTask,它将方法作为参数而不是执行它,但据我所知,在Java中不可能将方法作为参数传递。
换句话说,我正在寻找以异步方式执行方法的最紧凑(但正确)的方法。
答案 0 :(得分:4)
Handler
和Looper
。
大多数情况下,将处理程序保留到UI线程的Looper
,然后使用它发布Runnable
。例如:
Handler h = new Handler();
//later to update UI
h.post(new Runnable(//whatever);
PS:Handler
和Looper
非常棒。我remade将它们用于Java。
答案 1 :(得分:0)
如果你使用了Command设计模式,并制作了一个可以运行你的“命令”对象的通用AsyncTask,那么每个任务只需要一个类,而一个通用的AsyncTask就可以执行它们。你甚至可以做一个通用的“命令”,通过反射或一些预定义的接口方法执行一个方法。