0

我目前正在研究 android 模块化。如果 API 调用期间的模块 A(未经授权)在模块 B(登录模块)中启动活动,我有一个场景。是否可以回调模块 A 模块 B 中的登录是否成功,以便我们可以尝试失败的请求。

我们可以通过 StartActivtyForResult Intent 得到回调。但是当有很多 API 请求时,将无法很好地处理 Intent 结果。它还可能导致整个应用程序在处理意图时重复代码。

有没有办法保持失败的 API 调用并在从另一个模块回调后重试?有关该方法的任何想法都会有所帮助

4

1 回答 1

1
  1. 创建core模块,制作module Amobule B实现模块core

  2. 在模块中core添加依赖项RxJava2并创建类EventBusEvent. 如果您想推送Event更多数据,只需扩展它即可。

object EventBus {
    private val sStream: Subject<Event> = PublishSubject.create<Event>().toSerialized()

    @JvmStatic
    fun push(event: Event) {
        sStream.onNext(event)
    }

    @JvmStatic
    fun observerOnUi(topic: Int): Observable<Event> {
        return sStream.filter { event: Event -> event.topic == topic }.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
    }

    @JvmStatic
    fun observerOnBackground(topic: Int): Observable<Event> {
        return sStream.filter { event: Event -> event.topic == topic }.subscribeOn(Schedulers.io())
    }
}
open class Event(val topic: Int)
  1. 您可以调用模块 B 中的用法
EventBus.push(Event(REQUEST_FAILED)
  1. 在模块 A 创建中观察,CompositeDisposable确保在组件销毁时调用 dispose()。
val disposable = CompositeDisposable()
disposable.add(EventBus.observerOnUi(REQUEST_FAILED).subscribe({
   // do anything
}))

我使用 Kotlin 代码,如果您在转换为 Java 时遇到问题,请告诉我

于 2020-05-20T06:20:38.723 回答