召回Android中的意图

时间:2019-01-11 05:39:19

标签: android performance android-intent

我如何在Android Studio中回想一个意图? 我正在尝试建立使用意图的服务。在某些情况下,如果活动未收到您的意图,我将尝试发送特定次数的广播(例如X次)。在X次之后,静止活动仍未获得该意图,我想删除该意图并对该活动进行其他操作。

1 个答案:

答案 0 :(得分:0)

作为实现此目的的一种方法,您可以通过EventBus作业广播JobQueue事件,该事件可以重试发送事件所需的次数。订户活动订阅了此事件,并且仅在事件被处理的情况下创建您的Intent。

从代码角度来看,这可以实现为:

将要广播的事件:

class SomeEvent(val isSuccess: Boolean)

作业类,该实例由您的服务启动:

class SendCustomEventJob() : Job{

    @Inject
    @Transient
    lateinit var eventBus: EventBus

    // dagger jobs component injection
    override fun inject(appComponent: AppComponent) {
        super.inject(appComponent)
        appComponent.inject(this)
    }

    override fun onRun() {
        // some logic goes here, like API calls
        eventBus.post(SomeEvent(true))
    }

    override fun shouldReRunOnThrowable(throwable: Throwable, runCount: Int, maxRunCount: Int): RetryConstraint {
        if(runCount == 3)
            // your custom job exceptions handling logic
    }

    override fun getRetryLimit(): Int = 3 // your custom retries number
    override fun onAdded() { }

    override fun onCancel(cancelReason: Int, throwable: Throwable?) {
        eventBus.post(SomeEvent(false))
    }
}

在活动订阅者中处理事件:

@Subscribe(threadMode = ThreadMode.MAIN)
fun onFetchedCustomEvent(event: SomeEvent) {
    if (!event.isSuccess)
        return

    //create your intent here...
}