在返回结果之前等待 AsyncTask.execute(()) 完成

Posted

技术标签:

【中文标题】在返回结果之前等待 AsyncTask.execute(()) 完成【英文标题】:Wait for AsyncTask.execute(()) to finish before returning result 【发布时间】:2020-05-13 19:49:16 【问题描述】:

我正在从本地 android RoomDB 读取数据,我需要在后台进行,因为在 UI Thread 上不允许从 DB 读取数据。所以我有这个方法:

@Override
public DBBackedRouteModel getDBBackedRouteModelByID(Long id) 
    AsyncTask.execute(() -> 
        this.dbBackedRouteModel = routesParser.getDBBackedRouteModel(id);
    );
    return dbBackedRouteModel;

有没有办法知道Async 已经完成,然后才返回结果?

【问题讨论】:

我认为你需要实现 onPostExecute() 方法 AsyncTask。 onPostExecute 仅在您的流程完成时调用 【参考方案1】:

您可以使用callbacks。我不确定你到底想做什么,但你可以,例如,在异步完成时做一个控制台日志。

【讨论】:

好吧,在这种情况下,我试图返回 dbBackedRouteModel,但使用当前代码,它将返回 null,因为它会在 ASyncTask 完成之前返回它 我不太确定,因为我以前没有遇到过类似的事情,但this 可能会有所帮助【参考方案2】:

您可以使用 EventBus。异步任务的 onPostExecute() 方法,您可以发布事件并传递您要读取的值。 希望这能解决你的问题

【讨论】:

以上是关于在返回结果之前等待 AsyncTask.execute(()) 完成的主要内容,如果未能解决你的问题,请参考以下文章

如何在从 Swift 3 中的函数返回结果之前等待 URLSession 完成

在返回函数的变量之前,如何等待 promise 完成?

Javascript在继续之前等待结果

阻塞非阻塞同步异步

如何编写一个在“返回”之前等待事件触发的 node.js 函数?

004---IO模型