1. 程式人生 > >Android Activity的onStop()與onDestroy() 回撥緩慢,延時呼叫的問題解決方案

Android Activity的onStop()與onDestroy() 回撥緩慢,延時呼叫的問題解決方案

前段時間做專案時遇到奇葩問題,特此記錄
問題發現
我們的專案在語句翻譯功能裡用到了百度語音識別和語音合成,把相關程式碼封裝到了library裡面,把library庫放到專案A裡面執行正常,同樣的庫移植到專案B裡面,居然有問題!!! 具體問題就是第一次進入Activity時正常,但是當退出來後立馬再點進去,就奔了,報得異常是語音識別相關類初始化時檢測到上次的物件未被銷燬,不能重複建立新物件,一直以為是百度語音的問題,找了好久也沒發現問題,鬱悶了一段時間,後面debug了一下 發現在頁面退出後好久以後(大概有個7到8秒吧)才執行onDestroy方法銷燬相關物件,onStop方法也是延時呼叫!!! 唉 找到問題出現在哪兒了!!!就好解決了 但是令我疑惑的是專案A裡面onDestroy方法執行很快,不知道專案B裡面為何延時如此之多!!!網上看了一些別人出現該問題的原因 但和我的不一樣,,,不管了,有緣在研究解決吧,反正是有辦法解決目前問題了
解決方法與建議


方法1:監聽物理返回鍵和左上角返回鍵,關閉頁面時銷燬
方法2:把銷燬的相關程式碼放到finish()裡面

@Override
    public void finish() {
        super.finish();
        // 不知道什麼原因換個專案以後onDestroy總是在頁面結束後大概7到8秒以後才會執行
        // 在此時間段內進入翻譯介面會奔潰 無耐之下把釋放程式碼放在了finish()裡面執行
        // 釋放語音合成和語音識別的資源
        realease();
    }

建議
  建議儘量不要在Activity的onDestroy方法中做回收資源、資料儲存、狀態改變等操作,特殊問題特殊對待吧!