day 12-13 面試題:apk瘦身、System.exit(),onDestory,Activity.finish()的區別

面試題:

1. 談談你對apk瘦身的經驗      
2. System.exit(),onDestory,Activity.finish()的區別

1. 談談你對apk瘦身的經驗

安裝包體積對轉化率、安裝時間、運行內存、ROM空間幾個方面影響都比較大。

  1. 業務梳理,開發模式升級

    很多需要使用較大的so庫的業務,嘗試着使用h5或者小程序等其他方式替代。比如pdf文件加載,可以在使用H5插件轉換爲網頁加載,而不是在客戶端引入6M+的so來實現該功能。

  2. ProGuard優化

    避免過度keep,避免keep *的方式出現,keep整個package也需要謹慎處理。四大組件的進一步混淆,我認爲暫時沒那麼大必要,穩定性爲首要任務。

  3. 參考FaceBook開源的ReDex工具,對Dex文件進行壓縮

    這個操作生產上我們也沒用,測試環境倒是有在使用。

  4. 圖片大小優化

    高清大圖,進行有損壓縮(使用tinypng網站)或者提供webp文件。沒用alpha通道的png圖,換成jpg圖片,可以減少體積。

  5. 手動lint檢查,手動刪除無用資源

    Android Studio上選擇“Analyze”選項,然後選擇“Inspect Code…”,範圍根據需要選擇執行,根據建議處理。

  6. 儘量少的使用三方庫,避免引入體積比較大的libary。

    rxJava,rxAndroid,zxing,zbar,Luban等,其實很多功能只需要拿核心代碼過來就可以。

  7. Gradle中配置shrinkResources打包時移除無用資源。

     buildTypes {
          release {
            //開啓代碼混淆
            minifyEnabled true
            //Zipalign優化
            zipAlignEnabled true
            //移除無用的resource文件
            shrinkResources true
          }
     }
    

2. System.exit(),onDestory,Activity.finish()的區別

System.exit()是退出進程,Activity.finish()是關閉頁面,onDestory是銷燬資源,後兩個是調用關係。
原先我們項目只有一個Activity,所以會有很多static的資源,在退出app時,必須使用System.exit(),否則再次進入時會有異常發生。

System.exit():
結束整個進程,Activity所佔用資源也會被釋放。

Activity.finish():
關閉Activtiy,調用這個方法時,Activity棧中已經將該Activity移除,onDestory可能會稍晚執行。

onDestory:
系統銷燬Activity所佔用的內存空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章