android模块化-通过Intent启动时从另一个模块获得回叫

问题描述 投票:0回答:1

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

我们可以通过StartActivtyForResult Intent进行回电。但是,当有许多API请求时,将无法很好地处理Intent结果。这也可能导致整个应用程序中处理意图的代码重复。

是否可以保留失败的API调用并在从另一个模块回叫之后重试?关于此方法的任何想法都将有所帮助

android android-architecture-navigation modularity unauthorized android-architecture
1个回答
0
投票
  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中的create CompositeDisposable,请确保在componenet销毁时调用dispose()。
val disposable = CompositeDisposable()
disposable.add(EventBus.observerOnUi(REQUEST_FAILED).subscribe({
   // do anything
}))

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

© www.soinside.com 2019 - 2024. All rights reserved.