TLDR:finishAffinity()和finishAndRemoveTask()之间有什么区别?

我正在开发一个只有一个活动的Android应用程序,并使用片段切换而不是新活动。

即使在清理后台堆栈时,我仍然遇到一个奇怪的问题,即通过背板生活的某个碎片。 长话短说,这个片段是活的,因为我从那个片段开始了一个网络浏览器。

使用流行的按回x2在我的主要活动中退出app技术,它将使用finishAndRemove任务“退出”。 这将返回到某个片段,而不是完全退出。 将后面的x2退出流程从finishAndRemoveTask更改为finishAffinity解决了我的问题。 为什么这样做?

#1楼 票数:12 已采纳

在Android中,所有活动都在任务堆栈中管理。 关联性用于对特定任务堆栈下的活动进行分组。 通常,亲和性指示活动优选或属于哪个任务。 一旦理解了堆栈的工作原理, finishAffinity()finishAndRemoveTask()的含义就非常简单了。

在此输入图像描述

finishAffinity()

完成此活动以及当前任务中具有相同亲缘关系的紧接其下的所有活动。

finishAndRemoveTask()

在您的活动完成后调用此应该关闭,并且应该完成任务作为完成任务的根活动的一部分。

活动的launchMode的一个很好的示范:标准,singleTop,singleTask和singleInstance是可以在这里找到

  ask by Josh Beckwith translate from so

未解决问题?本站智能推荐:

2回复

Android 片段 onCreateView 延迟

背景与问题: 我有一个自定义Fragment类。 我将这个片段类重用于多个状态显示。 在父Activity ,我加载片段并调用片段上的方法来设置一些文本等。当我这样做时,我遇到了NullPointerException 。 原因是onCreateView()还没有被调用,即视图不存在,因此访问Te
2回复

Android片段与复合控件

为什么要使用Android 3.0片段而不是复合控件? 可以创建一个View继承者或复合控件一次并在任何地方使用它。 我已经阅读了http://android-developers.blogspot.com/2011/02/android-30-fragments-api.html但未找
1回复

Android将页面数据片段保存

我有一个片段,可以从服务器加载json数据并将其显示在列表中。 我的问题是,当我在同一活动中移至另一个片段时,该片段数据将被删除。 当我回到该片段时,所有数据都是空的,并且再次从服务器加载。 有没有办法让片段在后台存活? 那就是我用来切换片段的代码: 非常感谢。
1回复

Android:如果片段不可见,为什么会启动这些片段?

我的Activity有两种布局。 第一个用于风景模式,包含两个FrameLayout ;第二个用于肖像模式,仅包含一个FrameLayout 。 片段被动态添加到各自的FrameLayouts ! 我无法理解为什么以纵向模式旋转Fragment的onStart()和onResume()方法
4回复

片段生命周期Android

如下面的回答。 最好的方法是将一个侦听器添加到viewpager中,以了解何时选择了每个片段。 这样,活动可以通过例如界面触发片段刷新侦听器。
2回复

每次重启后都会添加片段(Android)

每次重新启动 Activity 时,我添加到 FragmentManager 的片段都会加倍,而不会破坏 FragmentManager 中的先前片段。 这是我的代码: 我知道当片段中的方法被调用两次时,片段会被重复添加。 但是为了检查它是否真的是 FragmentManager 的问题,我调用
1回复

Android活动和片段生命周期问题?

对于NPE导致的崩溃,我具有以下堆栈跟踪: 我设置应用程序的方式如下: 主要活动 TimesFragment 我的期望据我了解, Activity.onCreate()只会在应用程序被杀死(在其他应用程序需要内存时由用户或由内存管理明确指示 Activity.onC
2回复

Android生命周期和主页按钮

我有两个活动的简单android应用程序: 第一个主要活动包含具有标签导航的ViewPager(3个标签,每个标签一个片段)。 这些片段之一是ListFragment,它是一本通讯录(图像和文本)。 第二活动代表联系方式。 当用户单击列表视图联系人行时,第二个活动即开