Fortnightly Tech Info - 20190510

Android

Detect App in Background or Foreground

LifecycleObserver will do the work.

class AppVisibilityObserver(private val doOnForeground: () -> Any, private val doOnBackground: () -> Any) : LifecycleObserver {

    init {
        ProcessLifecycleOwner.get()
                .lifecycle
                .addObserver(this)
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onForeground() {
        doOnForeground()
        Log.d("AppVisibilityObserver", "App running in foreground")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onBackground() {
        doOnBackground()
        Log.d("AppVisibilityObserver", "App going to background")
    }
}

In old days, we did:

class YourApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        registerActivityLifecycleCallbacks(AppLifecycleTracker())
    }

}


class AppLifecycleTracker : Application.ActivityLifecycleCallbacks  {

    private var numStarted = 0

    override fun onActivityStarted(activity: Activity?) {
        if (numStarted == 0) {
        // app went to foreground
        }
        numStarted++
    }

    override fun onActivityStopped(activity: Activity?) {
        numStarted--
        if (numStarted == 0) {
        // app went to background
        }
    }

}