【问题标题】:Cancel Retrofit+RxJava call when app is closed by pressing back button通过按返回按钮关闭应用程序时取消 Retrofit+RxJava 调用
【发布时间】:2020-04-25 15:37:20
【问题描述】:

我有一个使用 retrofit2RxJava 进行网络调用的库模块。应用程序启动时会进行调用,成功时会显示​​ toast 消息。启动应用程序后,如果我在结果出现之前使用后按关闭应用程序,一段时间后会显示 toast,这意味着调用正在后台运行。我不想那样。如果我关闭应用程序网络呼叫应该被取消。如果我从最近的应用程序中删除该应用程序,它不会发生。

【问题讨论】:

  • 你试过用Call.cancel()还是HttpClient方法OkHttpClient.dispatcher().cancelAll()
  • 发布您的代码,以便识别可以使用哪个对象取消。
  • 但是我应该在哪里调用它?我不希望在切换活动时取消这些调用。 @ρяσѕρєяK
  • 顺便说一句,这是一个库模块。
  • @SanjayPrajapat: I don't want these calls to be canceled when I switch the activity 在 Activity onBackPressed

标签: android retrofit retrofit2 rx-java2


【解决方案1】:

你需要这样做:

1) 识别应用程序何时进入后台 - 这可以使用 ProcessLifecycleOwner 类在一个地方完成,请参阅 sample implementation

2) 一旦 App 进入后台,调用 cancel() 或 cancelAll() 取决于您是要取消一个还是所有后台 API 调用。

由于您想在应用程序关闭时取消所有操作,我认为最好的方法是使用带有 ViewModel 范围的协程来调用 API 操作。这样,一旦您的应用程序关闭,ViewModel 范围就会结束,因此相关的挂起操作将自动取消,实现简洁明了! Reference希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多