場(chǎng)景
最近正在做富文本編輯器功能,用原生實(shí)現(xiàn)。效果圖如下:
面臨一個(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:
如圖所示defaultUncaughtHandler
是一個(gè) static
, 一旦設(shè)置之后,別人就拿不到了的回調(diào)事件了的,比如友盟之類(lèi)的統(tǒng)計(jì)無(wú)法上報(bào)錯(cuò)誤日志了的。
如何解?
如圖所示,持有一下別人的引用,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ā)者
。加油。