【问题标题】:Single android application with two tasks and its navigation具有两个任务及其导航的单个 android 应用程序
【发布时间】:2017-07-31 13:11:30
【问题描述】:

我正在开发一个呼叫应用程序。我的 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);

谁能帮助我使用导航参数来实现这一点?

【问题讨论】:

    标签: android navigation task back-stack launchmode


    【解决方案1】:

    为了有2个任务,你需要确保任务的根Activity有不同的taskAffinity,否则Android会将两者放在同一个任务中。默认的taskAffinity 是你的包名。

    android:taskAffinity="" 添加到&lt;activity&gt; 声明之一。

    【讨论】:

      【解决方案2】:

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

      此标志将导致任何现有任务与 在活动开始之前要清除的活动。那是, 该活动成为一个空任务的新根,并且任何 旧活动结束。

      因此,如果希望您的 CallActivity 留在后台堆栈中,您可以简单地这样做:

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

      【讨论】:

      • Umang,我现在试过了。即使在这种情况下,我的 CallActivity 也被破坏了,我不明白为什么。我也试过“intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);”。不过没用。
      • 如果您可以共享这两个活动的清单声明以及用于膨胀它们的代码,那就太好了
      • 使用上述声明的第二个活动不会被杀死。检查你是否在某处调用了finish()
      • 如果您有兴趣,可以运行这个示例应用程序:drive.google.com/file/d/0B9LRh_ZR9gI-Yk1Fd0N5em1aNjg/…。我的问题是为什么 CallActivity 被破坏了。
      • 我通过将呼叫活动设为“singleInstance”解决了这个问题。但是我没有得到关于为什么呼叫活动被杀死的合乎逻辑的解释。
      猜你喜欢
      • 2015-03-29
      • 2019-01-22
      • 1970-01-01
      • 2015-08-29
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多