当我明确地完成它时,我的活动重新启动.android

时间:2016-11-24 11:19:57

标签: android broadcastreceiver android-recents

场景 - 我没有在后台运行我的应用程序。我有一个为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&amp; Sx的Nexus设备。 7具有最近的应用程序按钮(即正方形)。

1 个答案:

答案 0 :(得分:0)

您可以使用savedInstanceState:

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

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

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);
}