0

场景 - 我没有在后台运行我的应用程序。我为 ACTION_USER_PRESENT 实现了一个接收器。在此接收器中,我启动了一个活动,其清单设置为:

<activity android:name=".activity.MyActivityB"
    android:excludeFromRecents="true"
    android:noHistory="true"
    android:screenOrientation="portrait"/>

这是因为其中有横幅,我将积分归功于用户,并且我不希望用户能够为同一个横幅一次又一次地启动它。

我在暂停时完成活动,因为我想在用户离开它时立即关闭它。

但是使用 Nexus 设备,当我按下最近的按钮时,活动会显示在最近的活动中,然后再次按下它,活动就会重新创建。

但是应该发生的是当活动在前台并且我按下最近按钮时,活动应该完成,因为我已经调用了这个:

@Override
protected void onPause() {
System.out.println("MyActivityB onpause called ");
    super.onPause();
    bannerShown = false;
    if(!isFinishing())
        finish();
}

但是当我再次按下最近按钮时,活动可能没有完成并重新创建。

这不在三星设备中,而仅在具有最近应用按钮(即方形按钮)的 Android 6 和 7 的 Nexus 设备中。

4

1 回答 1

0

您可以使用 savedInstanceState:

https://developer.android.com/training/basics/activity-lifecycle/recreating.html

它用于在延迟一段时间后恢复 Activity 并重新创建对象,但它们必须是可序列化的。您可以在此处使用它通过布尔值保存您的活动状态。

private static final String ACTIVITY_STATE = "activityState";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Check whether it's firstly opened or recreated
    if (savedInstanceState != null) {
        if(savedInstanceState.getBoolean(ACTIVITY_STATE)) {
            // recreated => force close
            finish();
        }
    } else {
        // first opend

    }
    ...
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Saves that it was open already
    savedInstanceState.putBoolean(ACTIVITY_STATE, true);
    super.onSaveInstanceState(savedInstanceState);
}
于 2016-11-24T11:51:09.417 回答