【问题标题】:AsyncTask - How to wait for onPostExecute() to complete before using values it has updatedAsyncTask - 如何在使用已更新的值之前等待 onPostExecute() 完成
【发布时间】:2016-07-06 04:51:20
【问题描述】:

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

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

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

Thread.sleep 和使用 CountDownLatch 不起作用,因为处理是在 UI 线程中完成的。有没有办法做这样的事情?

【问题讨论】:

    标签: android android-asynctask


    【解决方案1】:

    如果我理解正确,您在一个 jar 中有AsyncTask,而 UI 需要在另一个 jar 中更新。如果您将它们作为一个应用程序运行,则它们的位置无关紧要。由于您提到涉及一些回调,您可以在onPostExecute 中执行此回调。

    以下将是事件的大致顺序

    • 来自 jar 2 的 Activity 创建异步任务并将知道如何更新 TextView 的回调作为参数传递给构造函数
    • AsyncTask 将回调存储在实例变量中
    • 活动执行AsyncTask
    • AsyncTask in onPostExecute 使用适当的参数调用回调方法
    • 回调更新TextView

    【讨论】:

    • 嗨,亚历克斯,非常感谢您快速而有帮助的回复。不幸的是(我没有正确解释,很抱歉)这在我的情况下不太适用,因为我实际上只是使用这个 TextView 来测试回调处理程序是否正确解析了一些数据。所以问题真的是我想我不能在回调中引用 TextView 。如果可能,我需要“拉出”返回的值以更新 TextView 并将这些分开。在这种情况下有什么想法吗?感谢您帮助我澄清问题:-)
    • 你可以试试Messenger。我会在此处添加链接,但 Android 网站似乎已关闭。
    • 感谢一百万的参考,我会试用 Messenger 看看效果如何 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多