正面和负面呼叫完成

时间:2015-04-27 22:18:04

标签: android android-activity memory-management

我想知道当你尝试使用android打开一个新活动并通过调用finish来直接销毁之前的活动时有什么利弊。

人们认为这是一个坏主意,因为Android可以处理活动并在使用过多内存时删除它们,但是如果我进入该活动一次并且可能用户永远不会回来呢?这是一个不好的选择吗?

同样通过完成活动,后退按钮的历史记录是“清除”,因此它不会回到该活动(仅当您的用户流程需要返回时我认为您不应该调用完成)。

就记忆而言,最好是用完成来杀死活动,或者让android在背景中为知道多长时间进行此活动?

我觉得,您可以帮助系统向GC关闭您关闭的活动,并确保用户在退出应用程序之前不需要点击后退按钮100次。

那么你怎么看?更好地调用完成或不

1 个答案:

答案 0 :(得分:1)

  

我想知道当你尝试使用android打开一个新活动并通过调用finish来直接销毁之前的活动时有什么利弊。

您希望用户通过BACK按钮返回上一个活动,或者您不想。

  • 如果您希望用户通过BACK返回上一个活动,请不要致电finish()

  • 如果您不希望用户通过BACK返回上一个活动,则有多种选项,具体取决于您 希望用户在用户按下时的位置BACK

  

人们认为这是一个坏主意,因为Android可以处理活动并在使用过多内存时丢弃它们

不,Android does not do this

  

最好用完成来杀死活动,或者让android在后台进行此活动以了解谁知道多长时间?

它更好"让活动实现onTrimMemory()并根据需要减少其内存占用。不要损害用户对BACK按钮的期望。

  

您可以帮助系统向GC关闭您关闭的活动,并确保用户在退出应用程序之前不需要点击后退按钮100次

很少有用户会点击后退按钮100次"。他们将按HOME,或调出概览屏幕(a.k.a.,recent-tasks list),或通过其他方式导航到另一个应用程序。

现在,正如所说,当你想要清除任务(后台堆栈)时,,同时着眼于为用户提供逻辑流程。例如,在电子邮件应用中:

  • 用户启动应用程序,并创建一个新任务,用户转到应用程序的启动器活动,该活动显示用户收件箱中的消息(A)

  • 用户点击"搜索"操作栏项目,提出搜索活动,他们可以按各种标准搜索(B)

  • 用户填写搜索条件并点击" Go!"按钮,用于搜索并显示匹配的电子邮件消息(C)

  • 用户点按电子邮件信息,进行电子邮件查看活动(D)

  • 用户点击"删除"操作栏项,应删除该消息并返回用户......某处

如果您认为用户应该返回搜索结果(C),则可以在D中调用finish()。但是,如果您认为用户应该返回收件箱(A),则会使用适当的标志(例如startActivity())在A上调用Intent.FLAG_ACTIVITY_CLEAR_TASK,以清除后栈并将用户返回给A.

总之: NOT 调用finish()来处理堆空间;实现onTrimMemory()。但是,如果导航调用finish(),请使用它。