开源中国 OsChina Android 客户端源码分析(10)双击退出程序

感情迁移 提交于 2019-12-04 13:51:46

在源码中,火蚁完全封装了  双击退出程序的功能 : DoubleClickExitHelper类

该类的源码分析如下:

1  构造函数中传入了 设备上下文,实现退出功能的界面,完成消息处理器的初始化;既然要有提示条,那么也需要一个Toast对象。

2 既然完全封装,那么 我们需要将 按键的事件及按键码传进去,因为界面重写的onKeyDown 事件需要返回一个boolean值,那么在DoubleClickExitHelper类中也自定义了一个返回布尔值的onKeyDown 函数。 

3onKeyDown 函数:

3.1 如果不是按下键,则返回false;isOnKeyBacking 为全局变量,初始化DoubleClickExitHelper对象时,默认值为false,第一次点击的时候,其值为false,则将isOnKeyBacking 置为true,完成Toast的初始化,利用handler.post(runnable)延时执行一个业务——如果Toast 还在显示 直接手动关闭。当第二次点击的时候isOnKeyBacking 已经为true,这个时候存在一种可能:runnable 延时执行的业务还没有执行(从源码中我们可以看到,这个时间是2秒,也就是说2秒内再次点击了返回键的话),我们可以先去掉延时要执行的任务,然后直接关闭Toast,在执行关闭界面的操作等等。执行完后返回true,代表响应了KeyDown事件。

3.2 此方法的优势除了封装性外,就是存在手动关闭Toast的情况,一般在用的时候,显示时间不是short 就是 long ,但是在关闭界面后,当Toast显示后 在关闭时找不到设备上下文的话,就存在着 程序退出了,但那个Toast 确一直显示着,本人曾经遇到过这个问题。

    阅读代码,是一种良好的习惯,各位坚持!


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!