開源中國 OsChina Android 客戶端源碼分析(10)雙擊退出程序

在源碼中,火蟻徹底封裝了  雙擊退出程序的功能 : DoubleClickExitHelper類函數

該類的源碼分析以下:源碼分析

1  構造函數中傳入了 設備上下文,實現退出功能的界面,完成消息處理器的初始化;既然要有提示條,那麼也須要一個Toast對象。post

2 既然徹底封裝,那麼 咱們須要將 按鍵的事件及按鍵碼傳進去,由於界面重寫的onKeyDown 事件須要返回一個boolean值,那麼在DoubleClickExitHelper類中也自定義了一個返回布爾值的onKeyDown 函數。 spa

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 確一直顯示着,本人曾經遇到過這個問題。源碼

    閱讀代碼,是一種良好的習慣,各位堅持!it

相關文章
相關標籤/搜索