具有两个任务及其导航的单个 android 应用程序
Single android application with two tasks and its navigation
我正在开发一个呼叫应用程序。我的 HomeActivity 是一个 singleTask activity。我的调用activity也是一个singleTaskactivity.
从 HomeActivity 发起调用。此刻,我的应用程序有两个任务,因为它们都是 singleTask。在呼叫屏幕中,我有一个按钮可以访问我的 HomeActivity。
当我在通话屏幕中按下主页按钮并返回时,我的通话 activity 被破坏了。但它不应该被摧毁。它应该保留。
当我在通话屏幕中按下主页按钮时,我会执行以下操作。
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);
任何人都可以帮助我使用导航参数来实现这一点吗?
根据文档使用 FLAG_ACTIVITY_CLEAR_TASK 将执行以下操作:
this flag will cause any existing task that would be associated with
the activity to be cleared before the activity is started. That is,
the activity becomes the new root of an otherwise empty task, and any
old activities are finished.
因此,如果希望您的 CallActivity 留在后台堆栈中,您只需这样做:
Intent intent = new Intent();
intent.setClass(this.getActivity(), MyHomeActivity.class);
startActivity(intent);
为了有 2 个任务,您需要确保任务的根 Activity
具有不同的 taskAffinity
,否则 Android 会将两者放在同一个任务中。默认 taskAffinity
是您的包的名称。
将 android:taskAffinity=""
添加到 <activity>
声明之一。
我正在开发一个呼叫应用程序。我的 HomeActivity 是一个 singleTask activity。我的调用activity也是一个singleTaskactivity.
从 HomeActivity 发起调用。此刻,我的应用程序有两个任务,因为它们都是 singleTask。在呼叫屏幕中,我有一个按钮可以访问我的 HomeActivity。
当我在通话屏幕中按下主页按钮并返回时,我的通话 activity 被破坏了。但它不应该被摧毁。它应该保留。
当我在通话屏幕中按下主页按钮时,我会执行以下操作。
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);
任何人都可以帮助我使用导航参数来实现这一点吗?
根据文档使用 FLAG_ACTIVITY_CLEAR_TASK 将执行以下操作:
this flag will cause any existing task that would be associated with the activity to be cleared before the activity is started. That is, the activity becomes the new root of an otherwise empty task, and any old activities are finished.
因此,如果希望您的 CallActivity 留在后台堆栈中,您只需这样做:
Intent intent = new Intent();
intent.setClass(this.getActivity(), MyHomeActivity.class);
startActivity(intent);
为了有 2 个任务,您需要确保任务的根 Activity
具有不同的 taskAffinity
,否则 Android 会将两者放在同一个任务中。默认 taskAffinity
是您的包的名称。
将 android:taskAffinity=""
添加到 <activity>
声明之一。