当我明确完成它



方案 - 我没有在后台运行的应用程序。我为Action_USER_PRESENT实施了一个接收器。在此接收器中,我启动了一项活动,其清单设置为:

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

这是因为其中有横幅,我将其信用指向用户,我不希望用户一次又一次地启动它。

我在停顿上完成了活动,因为我想在用户尽快将其关闭。

但是使用Nexus设备时,当我按下Recents按钮时,该活动将显示在回收处,然后再次按下该活动。

但是应该发生的是活动在前景中,然后按下回收按钮,然后活动应该完成,因为我称之为:

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

但是,当我再次按RECENTS按钮时,活动可能并不可能完成并重新创建。

这不是在三星设备中,而是在Nexus设备中使用Android 6&amp;7具有最近的应用按钮(即正方形)。

您可以使用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);
}

相关内容

  • 没有找到相关文章

最新更新