在返回结果之前等待 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 完成