如何检查我的应用是否已失去焦点?

时间:2018-06-13 14:33:29

标签: java android

我是编码的新手,我想知道,如果有办法检查应用程序何时失去焦点(从前景到背景)。

onLosefocuslistener吗?

澄清我不希望活动失去焦点。我希望当整个应用程序进入后台时导致用户按下“主页”按钮或其他应用程序进入前台。

3 个答案:

答案 0 :(得分:2)

您可以在Application课程中注册活动生命周期回调。

请参阅:

https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks

https://developer.android.com/reference/android/app/Application#registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks)

然后,您可以简单地让一个计数器在活动开始时递增,并在活动停止时递减。如果计数器的值为零,则前台当前没有活动。

答案 1 :(得分:0)

这并不容易实现,但有一些轻量级的库可以轻松地完成您想要的任务。

我正在使用this one,效果非常好。

答案 2 :(得分:0)

科特林的例子:

import java.io.Closeable
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.runBlocking
import androidx.lifecycle.*

class AppLifecycleService() : LifecycleObserver, Closeable {

    val channel = Channel<Boolean>()

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

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onMoveToForeground() {
        runBlocking { channel.send(true) }
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onMoveToBackground() {
        runBlocking { channel.send(false) }
    }

    override fun close() {
        ProcessLifecycleOwner.get().lifecycle.removeObserver(this)
        channel.close()
    }
}

在某个地方实例化该类,然后订阅该频道。当您获得和失去焦点时,它将向您发送对/错。应用完成后,close()对该类的引用。