Android 源码解析:连按两次 Back 键退出应用程序

2,261 阅读3分钟

上次写的一篇《为你的应用程序加上数字角标》,很多同学看了之后都给了我很好的建议,谢谢大家,让我学到了很多东西。

国庆长假结束了,坑爹的工作又要开始了。赶了一天车,今天有点累,写点简单的东西,然后洗洗睡了。

很多应用程序都会实现这样的功能:当用户第一次点击back键的时候,弹出一个提示“再按一次退出程序”,简书也是这么做的。今天我们就来讨论一下这个功能是如何实现的。

首先,我们要知道,当我们点击back键的时候,系统会调用onBackPressed()这个方法,这个方法是Activity中的一个方法,其他的废话我就不多说了,我就告诉你,这个方法是一个回调方法。我们来看看系统默认的onBackPressed()这个方法是如何实现的,请看代码:



电脑不知道怎么回事,粘贴不了代码,不管了,你们就将就一下,看看截图吧。
代码很简单,系统默认的实现是直接去调用父类的onBackPressed()。遇到这种事情,我们肯定要点进去看看,父类到底是怎么实现的,死也要死个明白啊。



注释中是这么说的:好好照顾你的Fragment回退栈,并且找个合适的时机来finish你的Activity。换句话说,就是当你的fragment回退栈里面有东西的时候,if语句就会返回false,没有东西的时候,if语句才会返回true。
if语句里面又掉用了父类的onBackPressed(),我们再点进去看看,到底是什么鬼,为何如此神秘!!!



注释的意思是:当你按下back键的时候,系统会调用这个方法,并且系统允许你修改掉默认的实现方法。什么意思呢?就是在用户点击back键之后,可以执行你自己的代码块,不一定非要退出应用程序。
第一个if块是有关actionBar的,至于为什么要进行这个判断,我也不是很清楚,如果有人知道的话,麻烦告诉我一声,我来完善。
第二个if块跟上面的差不多,也是用来判断fragment回退栈的,我也不多说了,直接看一下finishAfterTransition()这个方法是干吗用的,我们点进去看一下



这个if语句我是真心看不懂了,但是finish()我们看得懂啊,不就是退出activity吗,看到这里我们也就明白了,其实onBackPressed()这个方法就做了一件事,就是finish掉activity,好了,我们现在来实现一下点击两次back键退出应用。代码很简单,我就不多说了,直接看图:



效果图我就不贴了,其实用简书app试一下就知道了

说点我的感受吧,有时候看源码我也看不懂人家为什么这么写,但是还是硬着头皮看下去了,总有看得懂的地方,所有不要害怕源码。今天这个教程主要是让你们感受源码的魅力,一个简简单单的功能,通过查看源码,你就学到很多知识,所以,有空的时候,看一点源码吧。

好了,今天的教程就到这里了,我要早点休息了。喜欢看我博客的人可以点个赞,点个关注,哈哈~~~另外,我的微信公众号开播了,每天都有技术干货分享,赶紧扫码关注吧!


代码也是人