因此,我有一个RxJava定时器在应用程序的后台运行,每30秒。问题是这个定时器会运行,即使在应用处于后台的时候也会运行。我担心的是,即使这个定时器在运行,AndroidOS是否会最终杀死应用程序。我希望操作系统最好能杀死这个应用,而不是因为这个计时器而被迫让它活着。当应用被关闭时,定时器就会被处理掉。
我在想,作为一个解决方案,我可以将这个observable的生命周期绑定到应用程序处于foregroundbackground中。这样它就会适当地暂停和重新启动。现在它一直运行到应用程序被杀死。下面是我如何设置定时器的。
navBadgeTimerDisposable = Observable.timer(refetchIntervalMs, TimeUnit.MILLISECONDS)
.flatMap {
fetchNavBadges(BADGES_TO_FETCH).toObservable()
}
.subscribe({
Timber.i("android_fetch_badge_success")
navBadge.onNext(it)
loadNavBadges(it.refetchIntervalMs)
}, {
if (MAX_RETRIES > 0) {
Timber.w(it, "android_fetch_badge_retry")
MAX_RETRIES -= 1
loadNavBadges(DEFAULT_RETRY_INTERVAL)
} else {
Timber.w(it, "android_fetch_badge_failure")
}
})
我希望操作系统最好能杀死应用,而不是因为这个定时器而强迫它保持活力。
这不是Android的操作方式。Android有一个非常复杂的算法,以确定何时会杀死一个应用。在大多数情况下,它会杀死应用,因为它必须释放资源(低内存)。
更多信息请看以下资源。
我在想,作为一个解决方案,我可以将这个observable的生命周期绑定到应用程序在foregroundbackground中。这样一来,它就会被适当地暂停再启动。
如果你不需要应用在后台时的定时器,你可以直接在一个生命周期回调中处置这个订阅。
有一些生命周期回调,当系统检测到低内存状态时,就会被调用。更多信息请看。https:/developer.android.comtopicperformancememory.