2

我正在开发只有两个活动的简单应用程序。

  • 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中删除。

4

1 回答 1

3

我不知道这是否是最干净的方法,但您可以覆盖void onBackPressed()活动方法。这样,您可以手动将您的活动移动到后台,就像这样,并防止以前的活动弹出:

public void onBackPressed () {
    moveTaskToBack (true);
}

编辑:原来有更好的方法来做到这一点:

打开您的AndroidManifest.xml, 并在每个声明中放入以下内容:`android:noHistory="true"`。这样做会告诉 Android 您的活动不会留下历史记录,因此,当用户回击时,Android 将退出应用程序,因为没有其他活动可以返回。

于 2012-12-04T11:02:40.350 回答