Android:finishAffinity() 与 finishAndRemoveTask()
Android: finishAffinity() vs finishAndRemoveTask()
TLDR:finishAffinity() 和 finishAndRemoveTask() 有什么区别?
我正在开发一个 Android 应用程序,它只有一个 activity,并且使用片段切换而不是新活动。
我遇到了一个奇怪的问题,即使在清除后台堆栈时,某个片段仍然存在于后台堆栈中。长话短说,这个片段是活的,因为我从那个片段启动了一个网络浏览器。
在我的主活动中使用流行的 press back x2 退出应用程序技术,它将 'exit' 使用 finishAndRemove 任务。这将 return 到那个特定的片段,而不是完全退出。将后退 x2 退出流程从 finishAndRemoveTask 更改为 finishAffinity 解决了我的问题。为什么这样做?
在 Android 中,所有活动都在 Task Stack 中进行管理。亲和力用于对特定任务堆栈下的活动进行分组。通常,亲和力表示 activity 更喜欢或属于哪个任务。一旦理解了堆栈的工作原理,finishAffinity() 和 finishAndRemoveTask() 的含义就非常简单了。
完成此 activity 以及当前任务中紧接其下的具有相同亲和力的所有活动。
当您的 activity 完成并且应该关闭并且作为完成任务的根 activity 的一部分应该完全删除任务时调用此方法。
Activity 的启动模式的一个很好的演示:标准、singleTop、singleTask 和 singleInstance 是 available here。
TLDR:finishAffinity() 和 finishAndRemoveTask() 有什么区别?
我正在开发一个 Android 应用程序,它只有一个 activity,并且使用片段切换而不是新活动。
我遇到了一个奇怪的问题,即使在清除后台堆栈时,某个片段仍然存在于后台堆栈中。长话短说,这个片段是活的,因为我从那个片段启动了一个网络浏览器。
在我的主活动中使用流行的 press back x2 退出应用程序技术,它将 'exit' 使用 finishAndRemove 任务。这将 return 到那个特定的片段,而不是完全退出。将后退 x2 退出流程从 finishAndRemoveTask 更改为 finishAffinity 解决了我的问题。为什么这样做?
在 Android 中,所有活动都在 Task Stack 中进行管理。亲和力用于对特定任务堆栈下的活动进行分组。通常,亲和力表示 activity 更喜欢或属于哪个任务。一旦理解了堆栈的工作原理,finishAffinity() 和 finishAndRemoveTask() 的含义就非常简单了。
完成此 activity 以及当前任务中紧接其下的具有相同亲和力的所有活动。
当您的 activity 完成并且应该关闭并且作为完成任务的根 activity 的一部分应该完全删除任务时调用此方法。
Activity 的启动模式的一个很好的演示:标准、singleTop、singleTask 和 singleInstance 是 available here。