在异步调用完成之前按下后退按钮时会发生什么?

我有查看正在存储在应用程序类的数组列表中的模型。 所以即使活动因为旋转而被破坏,它们的生命期也会继续(但是一旦isFinishing为true,那么视图模型实例将从列表中移除并且不再存在)。

我也有数据服务单身人士,视图模型也使用无限期的生活。 所以,如果我开始在我的视图模型使用anko异步块,即异步调用

async { val data = DataService.instance.getData() uiThread { if (data != null) { //do something } } } 

如果用户在通话完成之前按下后退按钮,会发生什么情况? IsFinishing将是真实的,我的视图模型实例将不复存在。 请问异步调用异常,当它返回或将它优雅地死亡?

如果基础活动/片段上下文已被垃圾收集,则uiThread调用中的代码将不会执行。 在异步调用中的uiThread调用将持有对上下文的WeakReference ,所以经常遇到的上下文内存泄漏将不会发生。 详情在这里 。

我想它会优雅地死去。 你可以编写一个小的测试程序,在其中调试行为。 但是,我强烈建议保持一个参考/指针异步任务,并杀死它,当你按下后退按钮。 不需要让它在后台运行,如果你不需要的结果/不能处理结果的权利