如果RxJava定时器在后台运行,Android多久会杀死应用?

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

因此,我有一个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 kotlin mobile rx-java rx-java2
1个回答
2
投票

我希望操作系统最好能杀死应用,而不是因为这个定时器而强迫它保持活力。

这不是Android的操作方式。Android有一个非常复杂的算法,以确定何时会杀死一个应用。在大多数情况下,它会杀死应用,因为它必须释放资源(低内存)。

更多信息请看以下资源。

我在想,作为一个解决方案,我可以将这个observable的生命周期绑定到应用程序在foregroundbackground中。这样一来,它就会被适当地暂停再启动。

如果你不需要应用在后台时的定时器,你可以直接在一个生命周期回调中处置这个订阅。

有一些生命周期回调,当系统检测到低内存状态时,就会被调用。更多信息请看。https:/developer.android.comtopicperformancememory.

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