Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在应用程序转到后台时检测以前的活动_Android_Background_Activity Lifecycle_Application Lifecycle - Fatal编程技术网

Android 如何在应用程序转到后台时检测以前的活动

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和活动B。
当应用程序转到后台时,我想检测哪个活动刚刚出现在前台。
例如: 活动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”,并在您的活动中设置其值。这样,当应用程序进入后台时,您就知道当前活动和当前状态