我是编程新手,我想知道,是否有一种方法可以检查应用程序何时失去焦点(从前台到后台)。
有没有像onLosefocuslistener这样的东西
澄清一下,我不希望当活动失去焦点时。我希望当整个应用程序进入后台,要么是因为用户按下了“主页”按钮,要么是另一个应用程序进入了前台。
发布于 2018-06-13 23:12:41
您可以做的是在Application类中注册活动生命周期回调。
请参见:
https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks
然后,您可以简单地使用一个计数器,该计数器在活动开始时递增,在活动停止时递减。如果计数器的值为零,则当前在前台没有活动。
发布于 2018-06-13 23:05:54
要做到这一点并不容易,但是有一些轻量级的库可以以一种简单的方式做你想要的事情。
我正在使用this one,它工作得非常好。
发布于 2020-01-30 23:28:59
Kotlin中的示例:
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()
}
}在某个地方实例化该类,并订阅通道。当你获得和失去焦点时,它会向你发送true/false。当你的应用完成后,close()这个类的引用。
https://stackoverflow.com/questions/50839871
复制相似问题