【问题标题】:How to detect when an Android application is minimized?如何检测Android应用程序何时最小化?
【发布时间】:2017-01-31 01:16:18
【问题描述】:

如何检测 Android 应用何时进入后台? onPause() 或 onUserLeaveHint() 有效,但在方向改变或出现其他活动时也会调用。

【问题讨论】:

标签: android android-activity minimize onpause


【解决方案1】:

标记的答案是 OP 问题的解决方法。 对于我们其他正在寻找答案的人,您可以使用 Android 架构组件

实现这一目标
import android.arch.lifecycle.LifecycleObserver;

class OurApplication extends Application implements LifecycleObserver {

    @Override
    public void onCreate() {
        super.onCreate();
        ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onAppBackgrounded() {
        Logger.localLog("APP BACKGROUNDED");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onAppForegrounded() {
        Logger.localLog("APP FOREGROUNDED");
    }
}

并记得更新清单文件。为<application> 标签设置android:name=".OurApplication" 属性

【讨论】:

  • 为无法使用 androidx 的人添加以下依赖项:implementation 'android.arch.lifecycle:extensions:1.1.1'
【解决方案2】:

如果方向发生变化,应用程序将再次调用整个生命周期,这意味着从 oncreate 开始

您也可以通过将以下代码写入清单来避免它

 <activity
      android:name=""
      android:configChanges="orientation|keyboardHidden|screenLayout|screenSize"
      android:label="@string/app_name" />

这告诉系统,当方向改变或keyboardHidden或screenLayout改变时,我将自行处理,无需重新创建。

然后在暂停时编写代码

【讨论】:

  • 好吧,快乐编码
  • 这可能会解决orientationChange问​​题,但是当您切换活动并且应用程序未最小化时仍会调用onPause......我仍在寻找答案。
【解决方案3】:

试试这个

 @Override
    protected void onUserLeaveHint() 
   { 
        // When user presses home page
        Log.v(TAG, "Home Button Pressed");
        super.onUserLeaveHint();
    }

详情:https://developer.android.com/reference/android/app/Activity.html#onUserLeaveHint()

【讨论】:

  • 当应用程序进入后台时,我需要完成活动。 onUserLeaveHint 在方向改变时也被调用。所以它对我不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多