我知道android的生命周期,不需要在应用程序中添加“退出”按钮.
但是,这种后退按钮的效果并不是很好.
您可能会从android附带的默认SMS-App中知道此问题:在收到新消息时将其打开,然后使用菜单按钮或其他按钮退出.
经过大约20次操作后,您决定使用“后退”按钮退出该应用程序,会发生什么情况?您必须返回20次浏览.每次按返回时,将返回到“所有消息(由发件人)”列表视图,再次按该返回时,将返回到打开的消息20-1(消息19).再按一次返回到列表视图,再按一次返回到消息18.直到按了40次后,您最终退出了messanger应用程序.
例如,当您获得带有“主页”图标的操作栏时,也会打开应用程序的主屏幕.用户选择一个动作,新的活动开始.用户单击主页按钮并返回到主屏幕.当按下后退按钮时-无论是否在onButtonBack侦听器中调用finish(),用户都希望该应用程序退出,但实际上该应用程序返回到上一个活动,这是错误的.
这样的循环可能由于各种原因而发生,这就是为什么-甚至以为我知道我认为应该是android的生命周期-当我在定义的活动中按回时,我不想退出(&销毁)该应用程序.
调用finish()没有帮助.如果以前有活动,它将重新打开它.调用system.exit(0)不好做.
如此:防止此类反向压榨周期和/或退出应用程序的正确方法是什么(有破坏)?
为了更好地说明我要实现的目标:考虑A,B,C是活动.箭头(->)表示从箭头左侧的活动进行的新意图调用,箭头右侧表示所调用的活动.例如:A-> B表示活动A开始活动B.这就是我想要的:
> 1)A-> B-> C按返回:-> B pressBack:-> A pressBack:->出口
> 2)A-> B按返回:-> pressBack:->出口
> 3)A-> B->按下返回:->出口
如您所见,Bback在活动A中退出应用程序后仍然照常工作.
我现在的行为是1)和2),但是
> 3)A-> B->按下返回:-> pressBack:->出口
请记住,我已经用finish()调用覆盖了活动A的onBackPressed侦听器.即使调用system.exit(0)也不起作用.但是,即使这样做:这不是我想要的,我想要真正的方式来实现android风格-我无法想象system.exit(0)是最佳实践.
解决方法:
好吧,这是默认行为.
如果您有其他方法,只需实施即可.
例如,如果SMS应用程序中的SMS页面是singleTop,则只需一按即可删除所有SMS页面.这是一个选择问题
另一种更具进取性的方法是在开始另一个活动时完成活动.当然,这样的决定会冒使应用程序不友好的风险(Android用户不习惯这种行为).但是,如果仅在可以接受的地方使用它,则可能是可以接受的.
一个非常容易接受的操作是登录屏幕:登录成功后,您将启动另一个活动(可能是为登录用户设计的)并完成登录活动.
享受最后,我个人认为,您可以添加退出按钮.用户会发现它不错.
标签:back-button,exit,lifecycle,android
来源: https://codeday.me/bug/20191101/1985950.html