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