10

假设我有一个 Activity 在屏幕上显示一些内容。我需要异步执行一些方法(asyncMethod),完成后,我需要更新屏幕上的数据。最正确和最简单的方法是什么?

目前我知道的最简单的方法是使用线程:

new Thread(new Runnable() {         
    public void run() {
        asyncMethod();              
    }
}).start();

我熟悉 AsyncTask,但它比使用线程更复杂,并且对于我需要异步运行的每种方法,都需要创建新的 AsyncTask,而这会大大增加代码大小。

我想到了一些通用的 AsincTask,它获取方法作为参数然后执行它,但据我所知,在 Java 中不可能将方法作为参数传递。

换句话说,我正在寻找最紧凑(但正确)的异步执行方法的方法。

4

2 回答 2

8

HandlerLooper

大多数时候,将 Handler 保留到LooperUI 线程,然后使用它来发布Runnable. 例如:

Handler h = new Handler();
//later to update UI
h.post(new Runnable(//whatever);

PS:Handler而且Looper很棒。以至于我为 Java重新制作了它们。

于 2013-05-01T11:48:00.623 回答
0

如果您使用Command设计模式,并创建了一个可以运行“命令”对象的通用 AsyncTask,那么每个任务只需要一个类和一个通用 AsyncTask 来执行所有任务。您甚至可以创建一个通用的“命令”,通过反射或一些预定义的接口方法执行一个方法。

于 2013-05-01T11:40:51.267 回答