Напомним намерение в Android - PullRequest
0 голосов
/ 11 января 2019

Как я могу вспомнить намерение в Android Studio? Я пытаюсь создать службу, которая использует намерение. В некоторых случаях я пытаюсь отправить трансляцию до определенного количества раз (скажем, X раз), если намерение не получено действием. После того, как X раз, активность все еще не получает намерение, я хочу удалить это намерение и выполнить какую-то другую операцию для этого действия.

1 Ответ

0 голосов
/ 11 января 2019

В качестве способа реализации этого вы можете транслировать EventBus события через JobQueue задание, которое может повторить отправку события необходимое количество раз. Активность подписчика подписывается на это событие и создает ваше намерение только в том случае, если событие было обработано.

С точки зрения кода это может быть реализовано как:

Событие, которое будет транслироваться:

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...
}
...