我是编码的新手,我想知道,如果有办法检查应用程序何时失去焦点(从前景到背景)。
有onLosefocuslistener
吗?
澄清我不希望活动失去焦点。我希望当整个应用程序进入后台时导致用户按下“主页”按钮或其他应用程序进入前台。
答案 0 :(得分:2)
您可以在Application
课程中注册活动生命周期回调。
请参阅:
https://developer.android.com/reference/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()
对该类的引用。