我需要检查我的应用程序是在后台还是在前台运行,然后相对于它执行一些操作。

我进行了很多搜索,但没有明确的解决方案。

  • 在其onPause()和onResume()方法中进行父 Activity ,保留一些变量以相应地更新它们。当您创建任何新 Activity 时,请继承您的父 Activity 。
    尽管这是实现任务的最佳解决方案,但有时即使在应用程序处于后台时单击电源按钮,也会调用onResume()。
  • 使用GETTASKS权限-此解决方案也不错。但是它只能用于调试目的。如果您想将您的应用程序放到Google Play商店中,则不需要。

  • Get Running Taks

    还有其他首选的解决方案吗?

    最佳答案

    原始答案:https://stackoverflow.com/a/60212452/10004454
    根据Android文档的推荐方法是

    class MyApplication : Application(), LifecycleObserver {
    
    override fun onCreate() {
        super.onCreate()
        ProcessLifecycleOwner.get().lifecycle.addObserver(this);
    }
    
    fun isActivityVisible(): String {
        return ProcessLifecycleOwner.get().lifecycle.currentState.name
    }
    
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onAppBackgrounded() {
        //App in background
    
        Log.e(TAG, "************* backgrounded")
        Log.e(TAG, "************* ${isActivityVisible()}")
    }
    
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onAppForegrounded() {
    
        Log.e(TAG, "************* foregrounded")
        Log.e(TAG, "************* ${isActivityVisible()}")
        // App in foreground
    }}
    

    在gradle(应用程序)中添加:implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
    然后在运行时检查状态,请调用MyApplication().isActivityVisible()

    10-07 23:35