Android crash 異常捕獲處理Thread.UncaughtExceptionHandler 注意事項(xiàng)

場(chǎng)景

最近正在做富文本編輯器功能,用原生實(shí)現(xiàn)。效果圖如下:


image.png

面臨一個(gè)問(wèn)題是:如果用戶確實(shí)寫(xiě)了很多內(nèi)容,在某種場(chǎng)景下,導(dǎo)致程序奔潰了的,不論是外在或是富文本編輯器本身導(dǎo)致的,都會(huì)導(dǎo)致用戶辛辛苦苦在手機(jī)上撰寫(xiě)的東西丟失掉。很痛心。

所以產(chǎn)品希望,如果發(fā)生意外閃退,幫助用戶保存數(shù)據(jù)。

解決方案

想到了Android的 Thread.UncaughtExceptionHandler 。But:

image.png
image.png

如圖所示defaultUncaughtHandler是一個(gè) static, 一旦設(shè)置之后,別人就拿不到了的回調(diào)事件了的,比如友盟之類(lèi)的統(tǒng)計(jì)無(wú)法上報(bào)錯(cuò)誤日志了的。

如何解?

image.png

如圖所示,持有一下別人的引用,crash的時(shí)候同時(shí)通知下別人。這樣就能保證別人也能正常拿到事件回調(diào)了的。

But, 這個(gè)bug小日記,其實(shí)是想說(shuō):搶系統(tǒng)資源的時(shí)候,請(qǐng)禮貌一些。因?yàn)閾?jù)說(shuō)友盟似乎就簡(jiǎn)單粗暴直接自己覆蓋掉別人的了的,那樣導(dǎo)致如果是后面初始化友盟,導(dǎo)致別人就拿不到回調(diào)了的。

同理,在處理音視頻的時(shí)候,請(qǐng)也禮貌一些。因?yàn)橄到y(tǒng)其實(shí)也是支持資源管理的,但很多音樂(lè)播放軟件并沒(méi)有做這個(gè)處理。導(dǎo)致一旦打開(kāi)音頻之后,就被這個(gè)APP給霸占了的。這一點(diǎn)ios從API設(shè)計(jì)層面就規(guī)避掉了的。

當(dāng)然日常開(kāi)發(fā)過(guò)程中,也要注意 static的問(wèn)題,別動(dòng)不動(dòng)為了方便就用靜態(tài)變量,因?yàn)楹茈y保證不被別人串改。

做一個(gè)有良知的開(kāi)發(fā)者。加油。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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