Crash & OOM

Crash

.閃退(Crash)是客戶端程序在運(yùn)行時(shí)遭遇無法處理的異?;蝈e(cuò)誤時(shí)而退出應(yīng)用程序的表現(xiàn),請從crash發(fā)生的原因分類與解決方法、
在出現(xiàn)crash后如何捕捉并分析異常這兩個(gè)問題給出自己的解決方案

原因分類
  • 虛擬機(jī)Error:一些虛擬機(jī)無法處理而拋出的異常,比如常見的stackoverflow和oom
  • RuntimeException:比如常見的NullPointException、ArrayIndexOutOfBoundException和ClassNotFoundException等
  • 非運(yùn)行異常:比如FileNotFoundException
  • Android特有屬性:比如使用主線程進(jìn)行耗時(shí)操作,比如網(wǎng)絡(luò)請求
image.png
解決方案
  • 正確并有效地使用異常
    具體明確地拋出異常,而不是為了簡單拋出一個(gè)Exception;
    提早拋出異常,比如在文件操作時(shí),需要對filename進(jìn)行檢查;
    延遲捕獲,不要過早地吃掉異常

  • 使用Android進(jìn)程中的UnCaughtExceptionHandler(未捕獲異常處理器)對象
    自定義一個(gè)UncaughtExceptionHandler對象,并設(shè)置為當(dāng)前進(jìn)程的UncaughtExceptionHandler對象,重寫UncaughtExceptionHandler
    方法來在閃退前獲取導(dǎo)致閃退異常的詳細(xì)信息。

  • 使用第三方解決方案:比如Bugly、ACRA等。

OOM

APP發(fā)生OOM的原因以及如何避免

1.內(nèi)存壓力過大
  • 加載大量圖片,導(dǎo)致內(nèi)存不足: 對圖片進(jìn)行壓縮,并采用軟引用方法
  • 重復(fù)創(chuàng)建大量的view,比如listview的使用convertview和viewHolder
2.作用域不同,導(dǎo)致垃圾回收器無法回收
  • 非靜態(tài)內(nèi)部類隱性持有外部類的引用
  • context泄露:不要對Context-Activity長時(shí)間的引用(若要使用,必須保證和activity相同的生命周期);盡量用Application-Context;
3. 資源對象沒有關(guān)閉
  • 常見的資源對象比如cursor, stream
  • bitmap對象使用后不回收
  • 調(diào)用registerReceiver后,銷毀活動時(shí)沒有調(diào)用un方法。

如何避免內(nèi)存泄露

  • 使用緩存技術(shù),比如LruCache或DiskLruCache,對象重復(fù)并頻繁創(chuàng)建時(shí)使用對象池,比如Volley源碼中定義ByteArrayPool作為byte數(shù)組的緩存池
  • 對于引用生命周期不同的對象,采用軟引用或弱引用
  • 對于資源對象,一定要關(guān)閉
  • 內(nèi)存壓力過大,就需要統(tǒng)一管理內(nèi)存
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,872評論 11 349
  • 1、什么是oom 一句話:c++ 中內(nèi)存的泄漏指定的new出來的對象 ,沒有delete掉,變成了空指針.java...
    仕明同學(xué)閱讀 7,167評論 9 11
  • 內(nèi)存管理的目的就是讓我們在開發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題。內(nèi)存泄漏大家都不陌生了,簡單粗俗的講,...
    宇宙只有巴掌大閱讀 2,493評論 0 12
  • 《針灸心法淺談》名曰淺談,實(shí)則不然,反而道理頗深。 書中所敘述的內(nèi)容都是針灸真正精髓層面的知識。而我以淺談為題,則...
    參朮苓草閱讀 3,601評論 5 9

友情鏈接更多精彩內(nèi)容