近期需要把一款手游迁移到Android上,由于一直用cocos2d-lua,对Android不熟悉,漏掉了退出键的实现,在测试童鞋的反馈下才意识到。想着这些问题一定有很多Android前辈遇到过,翻墙一查,还没看到解决方法,先看到一场关于『结束正在运行的Android程序』的争论,见StackOverflow这里。
提问者的疑问是,为什么安卓系统决定了何时退出App,而不是用户决定。也就是说用户并不能真正退出某个app。我也用过android手机,在想要退出某个app时,一般点击返回键两次确认就退出了。难道这只是幻觉?习惯iOS操作的童鞋一定知道,按Home键,只是退回到了桌面,app会进入休眠,iOS系统会决定何时终止app。Android也可以按主页返回到桌面,这个我理解和iOS是类似的。那么以略为复杂的方式,比如两次返回退出App(一般调用system.exit(0)或finish())应该可以『干净地』结束掉App的运行了吧?
看了几个回答,发现我的理解是错误的。
高票回答从Android设计哲学的角度阐述了为什么android系统控制何时结束App的运行,用户其实并不能『真正意义』结束。他的观点是用户并不真正想结束App,真正的想法只是不再使用这个App了,想切换到其他App而已。
次高票从技术角度阐述现有几种『退出』方式,比如:
System.exit()
并没有结束App的运行,它真正做的事情是杀死App进程并立刻重启finish()
是结束掉某个Activity,如果想退出App,需要想办法遍历所有的activity并且依次调用finish()
(然而并没有方法去遍历activity这件事╮(╯▽╰)╭)Activity.moveTaskToBack(true)
将App进程放入后台并且显示Home ScreenProcess.killProcess(Process.myPid())
被很多人认为是立刻结束进程,并释放资源的好办法
总结:如果玩家想要一个退出按钮,我就给他们一个吧,反正他们也不在乎是否真正退出。