Android的異常收錄

Android開(kāi)發(fā)過(guò)程中遇到各種異常是不可避免的洪碳。透過(guò)詳細(xì)的異常記錄苇羡,我們不但能理解程序崩潰的原因感局,還能根據(jù)異常類型采取針對(duì)性的解決措施扫茅。以下為一些常見(jiàn)的Android異常和它們的特征:

一、Java異常

  1. 空指針 (NullPointException)

    • 解決方案:檢查對(duì)象是否為null逗嫡,確保在調(diào)用方法或?qū)傩郧耙呀?jīng)初始化青自。
  2. 角標(biāo)越界 (IndexOutOfBoundsException, StringIndexOutOfBoundsException, ArrayIndexOutOfBoundsException)

    • 解決方案:檢查數(shù)組和字符串的索引是否越界,確保索引在有效范圍內(nèi)驱证。
  3. 調(diào)用一個(gè)空對(duì)象的方法 (Attempt to invoke virtual method on a null object reference)

    • 解決方案:檢查對(duì)象是否為null延窜,確保在調(diào)用方法前已經(jīng)初始化。
  4. 類型轉(zhuǎn)換異常 (ClassCastException)

    • 解決方案:檢查對(duì)象類型是否正確抹锄,確保在進(jìn)行類型轉(zhuǎn)換時(shí)逆瑞,對(duì)象實(shí)例與目標(biāo)類型一致。
  5. 數(shù)字轉(zhuǎn)換錯(cuò)誤 (NumberFormatException)

    • 解決方案:檢查字符串是否可以轉(zhuǎn)換為指定的數(shù)字類型伙单,例如整數(shù)获高、浮點(diǎn)數(shù)等。
  6. 聲明數(shù)組時(shí)長(zhǎng)度為-1 (NegativeArraySizeException)

    • 解決方案:確保數(shù)組的長(zhǎng)度為非負(fù)整數(shù)吻育。
  7. 遍歷集合同時(shí)刪除其中元素 (ConcurrentModificationException)

    • 解決方案:使用迭代器的remove方法刪除元素念秧,避免在遍歷過(guò)程中直接修改集合。
  8. 當(dāng)除數(shù)為0 (java.lang.ArithmeticException: divide by zero)

    • 解決方案:檢查除數(shù)是否為0布疼,并進(jìn)行相應(yīng)的異常處理摊趾。
  9. 類找不到 (ClassNotFoundException, NoClassDefFoundError)

    • 解決方案:檢查類路徑是否正確,確保所需類文件已添加到項(xiàng)目中缎除。

二严就、Activity異常

  1. 找不到Activity (android.content.ActivityNotFoundException)

    • 解決方案:檢查Intent的action总寻、data等屬性是否正確設(shè)置器罐,確保有Activity能夠處理該Intent。
  2. 不能實(shí)例化Activity (java.lang.RuntimeException)

    • 解決方案:檢查Activity的構(gòu)造方法是否可見(jiàn)渐行,確保Activity能夠被系統(tǒng)實(shí)例化轰坊。
  3. 找不到Service (java.lang.RuntimeException)

    • 解決方案:檢查Service的聲明是否正確,確保Service能夠被系統(tǒng)實(shí)例化祟印。
  4. 不能啟動(dòng)BroadcastReceiver (Unable to start receiver)

    • 解決方案:檢查BroadcastReceiver的聲明和注冊(cè)是否正確肴沫,確保能夠接收相應(yīng)的Intent。
  5. startActkivity沒(méi)有flag (android.util.AndroidRuntimeException)

    • 解決方案:在調(diào)用startActivity時(shí)蕴忆,添加FLAG_ACTIVITY_NEW_TASK標(biāo)志颤芬。
  6. startActivityForResult錯(cuò)誤 (Failure delivering result ResultInfo)

    • 解決方案:檢查startActivityForResult的調(diào)用和onActivityResult的實(shí)現(xiàn)是否正確。
  7. fragment未attach調(diào)用context (Fragment not attached to Activity)

    • 解決方案:確保在調(diào)用Fragment相關(guān)方法時(shí),F(xiàn)ragment已經(jīng)與Activity建立關(guān)聯(lián)站蝠。

三汰具、序列化異常

  1. 實(shí)體對(duì)象不支持序列化 (Parcelable encountered IOException)

    • 解決方案:檢查實(shí)體類是否實(shí)現(xiàn)Parcelable接口,確保序列化過(guò)程正確菱魔。
  2. 序列化時(shí)未指定ClassLoader (BadParcelableException)

    • 解決方案:在反序列化時(shí)指定正確的ClassLoader留荔。
  3. 反序列化時(shí)發(fā)現(xiàn)類找不到 (Parcelable encountered ClassNotFoundException)

    • 解決方案:檢查ProGuard配置,確保所需類未被混淆澜倦。
  4. 反序列化時(shí)發(fā)現(xiàn)類找不到(傳入畸形數(shù)據(jù)) (Parcelable encountered ClassNotFoundException)

    • 解決方案:檢查傳入的數(shù)據(jù)是否正確聚蝶,確保類名稱與實(shí)際類一致。
  5. 反序列化時(shí)出錯(cuò)藻治,數(shù)據(jù)太大 (Could not read input channel file descriptors from parcel)

    • 解決方案:檢查數(shù)據(jù)大小碘勉,確保不超過(guò)Parcel的最大容量。

四桩卵、窗體相關(guān)異常

  1. 窗口句柄泄露,dismiss前activity被銷毀android.view.WindowLeaked: Activity xxx has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{xxxx}

    • 解決方案:確保在Activity銷毀前恰聘,所有Dialog等都要被dismiss,避免泄露吸占。
  2. 窗體在不適當(dāng)?shù)臅r(shí)候獲取了焦點(diǎn)晴叨,顯示前獲取了焦點(diǎn)java.lang.NullPointerException: android.widget.PopupWindow$PopupViewContainer.dispatchKeyEvent

    • 解決方案:在彈出窗口前檢查Activity的狀態(tài),確保窗體能在正確的時(shí)機(jī)顯示矾屯。
  3. token null is not for an application兼蕊,AlertDialog的context是applicationandroid.view.WindowManager$BadTokenException: Unable to add window--token null is not for an application

    • 解決方案:確保創(chuàng)建AlertDialog等窗體時(shí),傳入的Context來(lái)自一個(gè)Activity而非Application件蚕。

五孙技、資源相關(guān)的異常

  1. Resources NotFoundException setText給的int值錯(cuò)誤android.content.res.Resources$NotFoundException: String resource ID #0x1

    • 解決方案:確保setText()傳入的是正確的字符串或資源ID。
  2. StackOverflowError排作,棧太多溢出StackOverflowError

    • 解決方案:檢查遞歸調(diào)用或過(guò)深的方法調(diào)用棧牵啦,優(yōu)化代碼結(jié)構(gòu),避免過(guò)深的嵌套妄痪。
  3. UnsatisfiedLinkError哈雏,so文件沒(méi)有加載到java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/appname-1.apk"]...

    • 解決方案:檢查.so文件是否在正確的目錄(jniLibs)下,并確保有針對(duì)不同架構(gòu)的版本衫生。
  4. InflateException之FileNotFoundExceptionCaused by: android.view.InflateException: Binary XML file line #18: Error inflating class <unknown>

    • 解決方案:確保布局XML文件中沒(méi)有錯(cuò)誤裳瘪,所有類名和資源引用正確無(wú)誤。
  5. InflateException之缺少構(gòu)造器android.view.InflateException: Binary XML file line #: Error inflating class com.example.activity1.TestButton

    • 解決方案:自定義View需要實(shí)現(xiàn)至少一個(gè)接受Context參數(shù)的構(gòu)造器罪针。
  6. InflateException之style與android:textStyle的區(qū)別android.view.InflateException: Binary XML file line #14: Error inflating class

    • 解決方案:檢查style屬性引用的樣式是否存在彭羹,并用正確的屬性。
  7. TransactionTooLargeException泪酱,Binder傳遞的數(shù)據(jù)大于1Mandroid.view.InflateException: Binary XML file line #14: Error inflating class

    • 解決方案:減少Intent或者IPC傳遞的數(shù)據(jù)大小派殷,分批傳輸大數(shù)據(jù)还最。

六、系統(tǒng)碎片化相關(guān)的異常

  1. NoSuchMethodError 方法在舊版本沒(méi)有或被廢棄java.lang.NoSuchMethodError

    • 解決方案:兼容不同版本毡惜,條件判斷系統(tǒng)版本憋活,反射等方式避免調(diào)用不存在方法。
  2. SecurityException之一:Intent中圖片太大java.lang.SecurityException: Unable to find app for caller android.app.ApplicationThreadProxy when stopping service Intent { cmp=... }

    • 解決方案:減少Intent中傳遞圖片的大小虱黄,避免超過(guò)系統(tǒng)限制悦即。
  3. SecurityException之三:No permission to modify threadjava.lang.SecurityException: No permission to modify given thread at

    • 解決方案:確保應(yīng)用擁有必要的權(quán)限來(lái)修改線程。

七橱乱、SQLite相關(guān)的異常

  1. No transaction is activeandroid.database.sqlite.SQLiteException: cannot commit–no transaction is active

    • 解決方案:在數(shù)據(jù)庫(kù)操作中正確開(kāi)啟辜梳、提交或回滾事務(wù)。
  2. 忘記關(guān)閉Cursorandroid.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed.

    • 解決方案:在數(shù)據(jù)操作完后泳叠,確保關(guān)閉Cursor來(lái)釋放資源作瞄。
  3. 數(shù)據(jù)庫(kù)被鎖定android.database.sqlite.SQLiteDatabaseLockedException: database is locked

    • 解決方案:使用同步或其他機(jī)制以防止數(shù)據(jù)庫(kù)同時(shí)被多個(gè)實(shí)例或進(jìn)程鎖定。
  4. 試圖再打開(kāi)已經(jīng)關(guān)閉的對(duì)象java.lang.IllegalStateException: attempt to re-open an already-closed object

    • 解決方案:確保不去操作已經(jīng)關(guān)閉的數(shù)據(jù)庫(kù)或游標(biāo)對(duì)象危纫。
  5. 文件加密了或無(wú)數(shù)據(jù)庫(kù)android.database.sqlite.SQLiteDatabaseCorruptException: file is encrypted or is not a database

    • 解決方案:驗(yàn)證數(shù)據(jù)庫(kù)文件的完整性宗挥,并確保正確地加密和解密。
  6. WebView中SQLite緩存導(dǎo)致的崩潰SQLiteDiskIOException: disk I/O error

    • 解決方案:優(yōu)化SQLite操作种蝶,避免磁盤I/O錯(cuò)誤契耿。
  7. android_metadata表不存在android.database.sqlite.SQLiteException: no such table: android_metadata

    • 解決方案:確認(rèn)創(chuàng)建數(shù)據(jù)庫(kù)時(shí)是否已自動(dòng)包含該表,該表通常由Android系統(tǒng)自動(dòng)創(chuàng)建螃征。

八搪桂、其他異常

  1. 內(nèi)存溢出(OutOfMemoryException)

    • 解決方案:優(yōu)化內(nèi)存管理,特別是圖片加載管理盯滚,使用像 GlidePicasso 等庫(kù)來(lái)幫助處理圖片踢械。
  2. 虛擬機(jī)發(fā)現(xiàn)了某種不一致或不兼容的字節(jié)碼(VerifyError)

    • 解決方案:確保編譯的環(huán)境與運(yùn)行環(huán)境一致,避免兼容性問(wèn)題魄藕。
  3. finalize方法執(zhí)行超時(shí)

    • 解決方案:避免在finalize方法內(nèi)執(zhí)行長(zhǎng)時(shí)間的操作内列。
  4. JSON解析異常(JSONException)

    • 解決方案:正確處理JSON數(shù)據(jù)格式,異常捕捉并處理背率。
  5. JSONArray初始化空指針異常(NullPointerException)

    • 解決方案:確保傳遞的JSON字符串格式正確话瞧,且非空。

以上列出的Android開(kāi)發(fā)中的異常與解決方案退渗,旨在幫助開(kāi)發(fā)者更高效地診斷并解決程序中的問(wèn)題移稳,從而提升應(yīng)用的穩(wěn)定性和用戶體驗(yàn)蕴纳。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末会油,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子古毛,更是在濱河造成了極大的恐慌翻翩,老刑警劉巖都许,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嫂冻,居然都是意外死亡胶征,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門桨仿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)睛低,“玉大人,你說(shuō)我怎么就攤上這事服傍∏祝” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵吹零,是天一觀的道長(zhǎng)罩抗。 經(jīng)常有香客問(wèn)我,道長(zhǎng)灿椅,這世上最難降的妖魔是什么套蒂? 我笑而不...
    開(kāi)封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮茫蛹,結(jié)果婚禮上操刀,老公的妹妹穿的比我還像新娘。我一直安慰自己婴洼,他們只是感情好馍刮,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著窃蹋,像睡著了一般卡啰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上警没,一...
    開(kāi)封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天匈辱,我揣著相機(jī)與錄音,去河邊找鬼杀迹。 笑死亡脸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的树酪。 我是一名探鬼主播浅碾,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼续语!你這毒婦竟也來(lái)了垂谢?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疮茄,失蹤者是張志新(化名)和其女友劉穎滥朱,沒(méi)想到半個(gè)月后根暑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡徙邻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年排嫌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缰犁。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淳地,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帅容,到底是詐尸還是另有隱情薇芝,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布丰嘉,位于F島的核電站夯到,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏饮亏。R本人自食惡果不足惜耍贾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望路幸。 院中可真熱鬧荐开,春花似錦、人聲如沸简肴。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)砰识。三九已至能扒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辫狼,已是汗流浹背初斑。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膨处,地道東北人见秤。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像真椿,于是被迫代替她去往敵國(guó)和親鹃答。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容