方案 - 我没有在后台运行的应用程序。我为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);
}