AsyncTask - 如何在使用它已更新的值之前等待onPostExecute()完成

4

我有一个API在一个jar包中,使用AsyncTask在后台执行一些工作。我需要等待结果返回,然后使用这个结果做更多的工作。

我在onPostExecute()方法中向一个类发送信号,然后在UI线程上处理结果,但是处理程序需要定义为不同项目中的回调,所以我不能只在onPostExecute中完成工作。

在第二个项目中,我需要等待AsyncTask结束并处理响应,然后将处理程序的结果显示在第二个项目中的活动中的TextView中。

Thread.sleep和使用CountDownLatch无法工作,因为处理是在UI线程中完成的。有没有办法做到这一点?

1个回答

2
如果我理解正确,您在一个jar中有AsyncTask,在另一个jar中需要更新UI。如果将它们作为一个应用程序运行,则它们所在的位置不重要。由于您提到涉及一些回调,因此可以在onPostExecute中执行此回调。
以下是大致的事件顺序:
1. 来自jar 2的Activity创建异步任务,并将知道如何更新TextView的回调作为参数传递给构造函数。 2. AsyncTask将回调存储在实例变量中。 3. Activity执行AsyncTask。 4. AsyncTask在onPostExecute中使用适当的参数调用回调方法。 5. 回调更新TextView。

嗨,Alex,非常感谢您快速而有帮助的回复。不幸的是(我的疏忽,没有恰当地解释清楚,对此我很抱歉),在我的情况下这并不完全适用,因为我实际上只是使用这个TextView来测试回调处理程序是否正确解析了一些数据。所以问题实际上是,我想在回调中不能引用TextView。如果可能的话,我需要“提取”返回的值以更新TextView,并将它们保持分开。在这种情况下,您有什么想法吗?感谢您帮助我澄清问题 :-) - Karen Forde
你可以尝试使用“Messenger”。我本来想在这里添加链接的,但似乎安卓网站出了问题。 - Alex Gitelman
Messenger javadoc:http://developer.android.com/reference/android/os/Messenger.html - Alex Gitelman
非常感谢您提供的参考,我会尝试使用 Messenger 并看看效果如何 :-) - Karen Forde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接