我正在开发只有两个活动的简单应用程序。
用户无法从一个导航到另一个 - 这就是我称之为独立活动的原因。更多活动A仅在事件中被调用,用户无法手动执行。
问题。我们假设应用程序已正确配置。某些事件发生在系统中,因此应用程序A正在向用户显示。用户与之交互,活动转到后台。然后,用户决定启动配置活动C.向用户显示活动C.用户使用后退按钮来“关闭”活动,但是用户正在显示活动A(取自历史记录),而不是Android启动器或桌面。
类似的情况可能会以另一种方式发生。 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)出现在 Recent 应用程序中。但是,一旦调用了活动A,应用程序就会从 Recent 中删除。
答案 0 :(得分:3)
我不知道这是否是最干净的方法,但您可以覆盖void onBackPressed()
活动方法。通过这种方式,您可以将活动手动移动到后台,并阻止之前的活动弹出:
public void onBackPressed () {
moveTaskToBack (true);
}
编辑:原来有更好的方法:
打开你的AndroidManifest.xml
,并在每个声明中添加以下内容:`android:noHistory =“true”``。这样做会告诉Android您的活动没有留下历史记录,因此,当用户返回时,Android将退出该应用程序,因为没有其他活动可以返回。