我有一个库模块,它使用retrofit2和RxJava进行网络调用。调用在应用启动时进行,并在调用成功时显示 Toast 消息。启动应用程序后,如果我在结果出现之前使用后按关闭应用程序,一段时间后会显示 toast,这意味着呼叫在后台运行。我不想这样。如果我关闭应用程序,则应取消网络调用。如果我从最近的应用程序中删除该应用程序,则不会发生这种情况。
您需要这样做:
1( 确定应用何时进入后台 - 这可以使用 ProcessLifecycle Owner 类在一个地方完成,请参阅示例实现
2( 应用程序进入后台后,调用 cancel(( 或 cancelAll((,具体取决于您是要取消一个还是所有后台 API 调用。
由于您想在应用程序关闭时取消所有操作,我认为最好的方法是将协程与 ViewModel 范围一起使用来调用 API 操作。这样,一旦您的应用程序关闭,ViewModel 范围就会结束,因此相关的挂起操作将自动取消,实现简洁明了!参考 希望这有帮助!