首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android中的‘`finishAffinity();’和‘`finish()’方法有什么区别?

Android中的‘`finishAffinity();’和‘`finish()’方法有什么区别?
EN

Stack Overflow用户
提问于 2018-11-27 07:22:46
回答 3查看 18.6K关注 0票数 10

我用了一些代码来显示屏幕,如果用户不想登录的话,它会迫使应用程序关闭。如果用户选择不登录/取消,它会调用代码退出应用程序。我已经成功地用以下两种方法(不是同时)完成了这两项工作:

代码语言:javascript
运行
复制
finishAffinity();
 System.exit(0);

代码语言:javascript
运行
复制
finish();
 System.exit(0);

但这两行代码似乎都在做同样的事情.该应用程序对用户关闭,但如果用户按下“概览”按钮,他们可以选择它重新打开,则该应用程序仍将在后台应用程序中重新打开。(它只是重新启动要登录的提示。)

由于我没有注意到功能上的差异,所以我想知道finishAffinity()finish()方法之间有什么区别?

的额外问题:也有办法完全关闭应用程序,所以它也不会出现在概述按钮应用程序列表中吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-27 07:28:35

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

即使您完成了应用程序中的所有活动,承载应用程序的OS进程也不会自动消失(就像调用System.exit()时一样)。Android最终会杀死你的进程,当它开始的时候。你无法控制这件事(这是故意的)。

finish():当在活动中调用finish()时,执行方法onDestroy()可以这样做:

  • 取消任何活动正在管理的对话框。
  • 关闭活动正在管理的所有游标。
  • 关闭任何打开的搜索对话框。
票数 15
EN

Stack Overflow用户

发布于 2018-11-27 07:27:44

finishAffinity():

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

完成()

关闭仅打开的活动

另外,有没有办法完全关闭应用程序,所以它也不会出现在概述按钮应用程序列表?

是的,您可以将android:noHistory="true"添加到您的Manifest.xml中的Manifest.xml中。

票数 17
EN

Stack Overflow用户

发布于 2018-11-27 07:31:01

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

finishAffinity():完成当前活动以及当前任务中所有具有相同亲缘关系的活动。当您的活动完成并应该关闭时,finishAndRemoveTask():调用它,并且作为完成任务根活动的一部分,任务应该被完全删除。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53494605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档