我想知道当你尝试使用android打开一个新活动并通过调用finish来直接销毁之前的活动时有什么利弊。
人们认为这是一个坏主意,因为Android可以处理活动并在使用过多内存时删除它们,但是如果我进入该活动一次并且可能用户永远不会回来呢?这是一个不好的选择吗?
同样通过完成活动,后退按钮的历史记录是“清除”,因此它不会回到该活动(仅当您的用户流程需要返回时我认为您不应该调用完成)。
就记忆而言,最好是用完成来杀死活动,或者让android在背景中为知道多长时间进行此活动?
我觉得,您可以帮助系统向GC关闭您关闭的活动,并确保用户在退出应用程序之前不需要点击后退按钮100次。
那么你怎么看?更好地调用完成或不
答案 0 :(得分:1)
我想知道当你尝试使用android打开一个新活动并通过调用finish来直接销毁之前的活动时有什么利弊。
您希望用户通过BACK按钮返回上一个活动,或者您不想。
如果您希望用户通过BACK返回上一个活动,请不要致电finish()
如果您不希望用户通过BACK返回上一个活动,则有多种选项,具体取决于您 希望用户在用户按下时的位置BACK
人们认为这是一个坏主意,因为Android可以处理活动并在使用过多内存时丢弃它们
最好用完成来杀死活动,或者让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()
,请使用它。