本文仅针对Android模拟器来进行探索(买不起真机)。
看书时偶尔看到startActivity与startActivityForResult方法比较,想起一个面试题:如何安全退出多个Activity?
网络上很多文章都有那几种解决方案。如:1、把所有打开的Activity记录下来,然后在项目结束时统一进行finish();2、采用startActivityForResult方法,在启动另一个Activity时,针对原Activity递归调用finish();3、发送广播,所有的Activity收到广播后进行finiah()。
以上三种解决方案,都是可以给用户造成已经退出全部应用程序的假象的,为什么说是假象呢?因为该应用程序的进程并没有被杀死(切换到DDMS界面,可以看到进程还在)。同样,这样的话,会不会造成内存泄漏呢?我也不知道。
下面是我在模拟器中杀死应用程序进程的测试:
首先我创建两个Activity分别为MainActivity,CustomActivity,两个Activity的view界面中各包含一个按钮。我想要做的事是点击MainActivity中的按钮跳转到CustomActivity,点击CustomActivity中的按钮完全退出应用程序并杀死进程。
第二步,我在MainActivity按钮的onClick事件中,使用startActivityForResult启动CustomActivity,并复写onActivityResult函数,在onActivityResult函数未进行任何操作。在CustomActivity中的按钮onClick事件使用System.exit(0)。结果运行后很悲剧的事情发生了。。应用程序在不断的销毁、创建,进程也在不停的被kill、create。随后进行了多种方式的实验,读者可根据排列组合自己去实验。最后,我在MainActivity的onActivityResult函数中,写上finish(),其它不变,运行后在CustomActivity中点击按钮,退出全部应用程序并杀死应用程序进程。
具体为什么这么做能达到目的我也不是很清楚,但是,我想,这种退出全部应用程序并杀死进程的方法会不会不好呢?假如有100个Activity,每一个在启动另一个的之后都把自己finish掉,那么再按返回键时,又要重新去oncreate,这会不会是一个昂贵的开销呢?
有些搞不懂了,暂且放下,发篇文章。希望有看过源码或理解的朋友来解答我的疑问!