Android中的“ finishAffinity();”和“ finish()”方法有什么区别?

Mr.*_*rew 1 java performance android android-lifecycle

我在登录屏幕上使用了一些代码,如果用户不想登录,则该应用程序会强制关闭应用程序。如果用户选择不登录/取消,则它将调用该代码以退出应用程序。我已经成功完成了这两种方式的操作(不是同时):

finishAffinity();
 System.exit(0);
Run Code Online (Sandbox Code Playgroud)

finish();
 System.exit(0);
Run Code Online (Sandbox Code Playgroud)

然而,这两行代码似乎都在做相同的事情...该应用程序对用户关闭,但如果用户单击“概述”按钮,他们可以选择重新打开该应用程序,但仍保留在后台应用程序中以重新打开。(这只是重新启动提示以登录。)

由于没有发现功能上的差异,因此我想知道finishAffinity()finish()方法之间的区别是什么?

奖励问题:另外,有没有办法完全关闭该应用程序,因此它也不会出现在概述按钮应用程序列表中?

Abh*_*pta 7

finishAffinity()finishAffinity()不用于“ 关闭应用程序 ”。它用于从当前任务中删除多个属于特定应用程序的活动(其中可能包含属于多个应用程序的活动)。

即使您完成了应用程序中的所有“活动”,托管应用程序的OS进程也不会自动消失(就像您在调用时那样System.exit())。Android最终会解决您的问题。您对此没有控制权(这是有意的)。

finish():在调用finish()活动时,将onDestroy()执行该方法,该方法可以执行以下操作:

  • 取消活动正在管理的所有对话框。

  • 关闭活动正在管理的所有游标。

  • 关闭任何打开的搜索对话框。


Ali*_*med 6

完成亲和力():

关闭当前堆栈中存在的所有活动

结束()

仅关闭打开的活动

另外,有没有办法完全关闭应用程序,使其也不会出现在概览按钮应用程序列表中?

是的,您可以为此目的添加android:noHistory="true"到您activities tagManifest.xml


Zah*_*eem 5

finishAndRemoveTask() 方法从堆栈中弹出所有活动,并从最近的任务列表中删除应用程序简单地完成当前活动以及当前任务中紧邻其下方的具有相同亲和力的所有活动, finish()方法弹出当前任务堆栈中的活动。详细文档链接

finishAffinity():完成当前活动以及当前任务中紧邻其下方的具有相同亲和力的所有活动。 finishAndRemoveTask():当您的活动完成并且应该关闭并且任务应该作为完成任务的根活动的一部分完全删除时调用此方法。