Android OnBackPressed finish()?

12
我想知道在所有活动中实现onBackPressed()函数调用finish()是否是一个好主意?或者说这样做不切实际,也不好吗?
如果不是,除了去清单文件并在每个活动中输入SingleInstance(我认为这会使应用程序变得更慢)之外,还有哪些选项可供选择?
谢谢。

2
onBackPressed() 方法会自动结束当前活动,除非我们对其进行重写。 - SilentKiller
SilentKiller 是正确的,回退栈以“后进先出”的方式运作。 - AlexBcn
@SilentKiller,你的意思是除非我们覆盖它?它会在内部调用super,所以你确定你说的是什么吗? - Steve Moretz
2个回答

14
首先,硬件返回按钮本身会调用finish()方法。如果您在活动中定义了onBackPressed()方法,这意味着您正在覆盖backButton的默认行为,因为当您按下后退按钮时,onBackPressed()方法将被调用。
现在,是否创建活动的单个实例取决于您的需求,例如,闪屏可以制作为单个实例,因为它只会在应用程序启动时显示一次,并且不需要将此活动保留在后堆栈中。您要经常使用的活动不应该是单个实例,否则可以将一个不常用的活动制作为单个实例。
请查阅后堆栈文档获取完整信息。

标准和“singleTop”可以实例化多个活动实例,并且实例将保留在同一任务中。 对于“singleTask”或“singleInstance”,活动类使用单例模式,该实例将成为新任务的根活动。


有些人在打开意图时使用标志。这是一个很好的方法吗?如果是,哪个标志应该适应我的需求?我不想打开多个活动,我经常看到它们留在后台..消耗内存:\ - user2902515
1
完全取决于您的需求。默认情况下,活动会保留在后台堆栈中,除非您使用标志手动删除它们,或者处理器从后台堆栈中杀死它们。 - Jitender Dev
我正在尝试在文档中找到正确的标志,但是我无法弄清楚。我只想要一个在已经打开活动时清除该活动的标志。我看到的所有标志都会在打开新活动时清除所有活动。 - user2902515
1
阅读 android:launchMode=["multiple" | "singleTop" | "singleTask" | "singleInstance"] - Jitender Dev
现在,使用appcompat-v7:23.4.0库,如果您的AppCompatActivity持有一个片段堆栈,super.onBackPressed()会首先影响后退堆栈中的片段:它弹出最后一个片段。如果没有剩余的片段在后退堆栈中 - 只有在这种情况下才调用finish()。因此,如果您想立即离开您的活动 - 请手动调用finish()。 - A. Petrov

0

这取决于您的应用程序需求,因为我们通常使用finish(),但是您也可以管理Android的生命周期。

最好使用暂停和恢复方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接