如何检测Android应用程序何时被最小化?

8
如何检测Android应用程序进入后台?
onPause() 或 onUserLeaveHint() 方法可以使用,但当屏幕方向改变或打开另一个活动时也会调用它们。

可能是重复的问题:如何从后台任务或服务中确定当前前台应用程序 - Aman Grover
3个回答

18

这个标记的答案是针对OP问题的一个解决方法。 对于我们其他人来说,你可以使用Android Architecture Components来实现这个问题的答案。

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' - MHSaffari

3

如果屏幕方向改变,应用程序将再次调用生命周期,这意味着从oncreate开始。

您也可以通过在清单中编写以下代码来避免此情况。

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

这个告诉系统当屏幕方向、软键盘隐藏或屏幕布局改变时,我会自己处理,不需要重新创建它。

然后在onPause中编写你的代码。


好的,愉快编码。 - Joyal C Joseph
4
这可能解决orientationChange问题,但当您切换活动且应用未最小化时,仍将调用onPause.....我仍在寻找答案。 - DoruChidean

2

1
当应用程序进入后台时,我需要完成活动。onUserLeaveHint也在方向更改时调用。所以它对我没有用。 - Agshin Huseynov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接