如何检测Android应用程序进入后台?
onPause() 或 onUserLeaveHint() 方法可以使用,但当屏幕方向改变或打开另一个活动时也会调用它们。
onPause() 或 onUserLeaveHint() 方法可以使用,但当屏幕方向改变或打开另一个活动时也会调用它们。
这个标记的答案是针对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"
属性设置为我们的应用程序。
implementation 'android.arch.lifecycle:extensions:1.1.1'
- MHSaffari如果屏幕方向改变,应用程序将再次调用生命周期,这意味着从oncreate开始。
您也可以通过在清单中编写以下代码来避免此情况。
<activity
android:name=""
android:configChanges="orientation|keyboardHidden|screenLayout|screenSize"
android:label="@string/app_name" />
这个告诉系统当屏幕方向、软键盘隐藏或屏幕布局改变时,我会自己处理,不需要重新创建它。
然后在onPause中编写你的代码。
试试这个
@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()