一个应用程序有两个独立活动

时间:2012-12-04 10:59:00

标签: android android-intent android-activity

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

  • 活动C配置应用程序
  • 活动A,用于在发生某些事件时与用户进行交互

用户无法从一个导航到另一个 - 这就是我称之为独立活动的原因。更多活动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 中删除。

1 个答案:

答案 0 :(得分:3)

我不知道这是否是最干净的方法,但您可以覆盖void onBackPressed()活动方法。通过这种方式,您可以将活动手动移动到后台,并阻止之前的活动弹出:

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

编辑:原来有更好的方法:

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