我正在开发只有两个活动的简单应用程序。
- Activity C 配置应用程序
- 活动 A 用于在某些事件发生时与用户交互
用户不可能从一个导航到另一个 - 这就是我称它们为独立活动的原因。此外,更多活动 A 仅在表单事件中被调用,用户无法手动执行此操作。
问题。假设应用程序配置正确。系统中发生了一些事件,因此正在向用户显示应用程序 A。用户与之交互,活动进入后台。然后用户决定启动配置活动 C。活动 C 显示给用户。用户使用后退按钮“关闭”活动,但不是 android 启动器或桌面,而是向用户显示活动 A(取自历史记录)。
类似的情况可能会以另一种方式发生。C 被用户使用,然后被带到后台。某些事件显示活动 A,用户使用后退按钮转到 C 而不是关闭活动 A。
我已经解决了这个问题,但解决方案很脏。有没有解决此类问题的干净或标准方法?
我的部分解决方案包括一个答案中的建议:
来自 AndroidManifest.xml 的片段:
<activity
android:name=".C"
android:clearTaskOnLaunch="true"
android:excludeFromRecents="false"
android:launchMode="singleTask"
...
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:exported="false"
android:name=".A"
android:excludeFromRecents="true"
android:noHistory="true"
android:launchMode="singleInstance"
android:clearTaskOnLaunch="true"
....
>
</activity>
活动 A 的片段:
public boolean onKeyUp(final int p_keyCode, final KeyEvent p_event) {
switch(p_keyCode) {
case KeyEvent.KEYCODE_ENDCALL:
case KeyEvent.KEYCODE_HOME:
case KeyEvent.KEYCODE_BACK:
case KeyEvent.KEYCODE_MUTE:
case KeyEvent.KEYCODE_POWER:
this.finish();
break;
....
}
return super.onKeyUp(p_keyCode, p_event);
}
从事件处理程序中截取:
public class H extends BroadcastReceiver {
...
Intent intent = new Intent(p_context, A.class);
intent.addFlags(Intent.FLAG_FROM_BACKGROUND);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
p_context.startActivity(intent);
...
}
它适用于我的应用程序。但是我希望应用程序(活动 C)出现在最近的应用程序中。但是一旦活动 A 被调用,应用程序就会从Recent中删除。