单个Android应用程序,具有两个任务及其导航

时间:2017-07-31 13:11:30

标签: android navigation task back-stack launchmode

我正在开发一个调用应用程序。我的HomeActivity是一个singleTask活动。我的通话活动也是单一任务活动。

从HomeActivity启动呼叫。此时,我的应用程序有两个任务,因为它们都是singleTask。在通话屏幕中,我有一个按钮可以访问我的HomeActivity。

当我在通话屏幕中按主页按钮并导航回来时,我的通话活动被销毁。但它不应该被摧毁。它应该保留下来。

当我在通话屏幕中按主页按钮时,我会执行以下操作。

Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.setClass(this.getActivity(), MyHomeActivity.class);
startActivity(intent);

我的宣言:

<activity
    android:name=".XXX.MyHomeActivity"
    android:label="@string/app_name"
    android:alwaysRetainTaskState="true"
    android:launchMode="singleTask"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustNothing"
    android:theme="@style/MyTheme"
    >
</activity>
<activity
    android:name=".XXX.MyCallActivity"
    android:label="@string/app_name"
    android:launchMode="singleTask"
    android:screenOrientation="portrait"
    android:theme="@style/MyTheme"
    android:windowSoftInputMode="adjustResize">

从CallActivity中扩充HomeActivity:

Intent intent = new Intent();
intent.setClass(this.getActivity(), HomeActivity.class);
startActivity(intent);

夸大CallActivity:

Intent intent = new Intent();
intent.setClass(this, CallActivity.class);
startActivity(intent);

有人可以帮助我使用导航参数来实现这个目标吗?

2 个答案:

答案 0 :(得分:1)

要完成2项任务,您需要确保任务的根Activity具有不同的taskAffinity,否则Android会将两者放在同一任务中。默认taskAffinity是您的包的名称。

android:taskAffinity=""添加到其中一个<activity>声明。

答案 1 :(得分:0)

根据使用FLAG_ACTIVITY_CLEAR_TASK的文档,将执行以下操作:

  

此标志将导致与之关联的任何现有任务   活动开始前要清除的活动。那是,   活动成为一个空的任务的新根,任何   旧的活动已经完成。

因此,如果希望您的CallActivity留在后台,您可以这样做:

Intent intent = new Intent();
intent.setClass(this.getActivity(), MyHomeActivity.class);
startActivity(intent);