Android 如何在应用程序转到后台时检测以前的活动
我有两项活动:活动A和活动B。Android 如何在应用程序转到后台时检测以前的活动,android,background,activity-lifecycle,application-lifecycle,Android,Background,Activity Lifecycle,Application Lifecycle,我有两项活动:活动A和活动B。 当应用程序转到后台时,我想检测哪个活动刚刚出现在前台。 例如: 活动A位于前台->单击主页按钮->应用程序转到后台 onBackground: ActivityA onBackground: ActivityB 活动B位于前台->单击主页按钮->应用程序转到后台 onBackground: ActivityA onBackground: ActivityB 我对ProcessLifecycleObserver感到困惑 @OnLifecycleEve
当应用程序转到后台时,我想检测哪个活动刚刚出现在前台。
例如: 活动A位于前台->单击主页按钮->应用程序转到后台
onBackground: ActivityA
onBackground: ActivityB
活动B位于前台->单击主页按钮->应用程序转到后台
onBackground: ActivityA
onBackground: ActivityB
我对ProcessLifecycleObserver感到困惑
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onEnterForeground() {
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onEnterBackground() {
}
因为无法检测到此处的哪些活动
当我尝试使用ActivityLifecycleCallbacks时,它是活动生命周期,而不是应用程序生命周期,因此无法在此处检测到背景状态
是否有任何解决方案可以解决这种情况?您应该使用android.arch.lifecycle软件包,该软件包提供类和接口,让您可以构建支持生命周期的组件 例如:
public class MyApplication extends Application implements LifecycleObserver {
String currentActivity;
@Override
public void onCreate() {
super.onCreate();
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
private void onAppBackgrounded() {
Log.d("MyApp", "App in background");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
private void onAppForegrounded() {
Log.d("MyApp", "App in foreground");
}
public void setCurrentActivity(String currentActivity){
this.currentActivity = currentActivity;
}
}
在activities的onResume()方法中,您可以在MyApplication singleton实例中维护currentActivity变量:
@Override
protected void onResume() {
super.onResume();
MyApplication.getInstance().setCurrentActivity(getClass().getName());
}
并检查onAppBackgrounded()中的currentActivity属性值。为什么要检测?@LakhwinderSingh我只想在应用程序从某个特殊屏幕转到后台时发送通知。谢谢您的方法。让我试试Matdev:很好用。谢谢但是,如果活动有两个状态,例如State1和State2。我只想在转到后台时检测到此活动&&state==state1。如何做到这一点?好的,我将向MyApplication类添加一个属性“currentState”,并在您的活动中设置其值。这样,当应用程序进入后台时,您就知道当前活动和当前状态