首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查我的应用是否失去了焦点?

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

Stack Overflow用户
提问于 2018-06-13 22:33:29
回答 3查看 835关注 0票数 0

我是编程新手,我想知道,是否有一种方法可以检查应用程序何时失去焦点(从前台到后台)。

有没有像onLosefocuslistener这样的东西

澄清一下,我不希望当活动失去焦点时。我希望当整个应用程序进入后台,要么是因为用户按下了“主页”按钮,要么是另一个应用程序进入了前台。

EN

回答 3

Stack Overflow用户

发布于 2018-06-13 23:12:41

您可以做的是在Application类中注册活动生命周期回调。

请参见:

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2018-06-13 23:05:54

要做到这一点并不容易,但是有一些轻量级的库可以以一种简单的方式做你想要的事情。

我正在使用this one,它工作得非常好。

票数 0
EN

Stack Overflow用户

发布于 2020-01-30 23:28:59

Kotlin中的示例:

代码语言:javascript
复制
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()这个类的引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50839871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档