對於一個商業項目而言,質量應該是研發同窗的生命線。git
線上出現了大面積的崩潰或者各類不可用,那畫面簡直美的不敢想象。這也是任何商業項目作大以後都會花大力氣在性能優化與高可用的緣由,這個過程當中也催生出了各類APM工具及HotFix方案,在必定程度上保障了性能同時提供了一道緊急修復的保障線。github
此處提一個問題:假設通過層層流程把關控制的應用在線上仍是出現了問題,而HotFix也沒法生效,是否是就沒得救了?數據庫
簡單的一句話就是:避免應用在啓動階段崩潰而此時HotFix沒法生效,致使的連續、嚴重的沒法啓動。緩存
此處舉一個例子:假設應用在啓動階段由於Application中某項出錯而必現崩潰,而拉取熱修復包的操做此時還未發生,那麼這個應用就會陷入連續啓動崩潰的嚴重情形;最終的命運必定是被用戶卸載。安全
那麼應用啓動階段的安全模式就應運而生。性能優化
須要明確的是任何技術都是服務於具體的業務場景,那啓動階段的安全模式就是爲了解決啓動階段崩潰卻沒法HotFix這種嚴重情形。微信
咱們來思考以下幾個問題:網絡
現現在各個App在業務上已經發展多年,同時移動端的技術革新也開展屢次,那麼應用在啓動階段須要作的事情愈來愈多,啓動崩潰的誘因可能有:工具
由上可見應用在啓動階段並不安全,在其中任意一環出現問題都將致使嚴重的事故。性能
通常應用都會設置主線程的UncaughtExceptionHandler來捕獲運行時的崩潰,很容易想到的就是把安全模式的斷定和UncaughtExceptionHandler關聯起來,可是這種作法有很大的缺陷:對Native的異常無能爲力,顯然不夠精確;
那咱們就採用逆向思惟,換種思路:
須要維護一個崩潰次數:
知足必定條件則重置崩潰次數:
本文是從設計一個庫的角度來思考應用啓動連續崩潰的處理,如今我很是貼心的爲你們推薦一個關於啓動保護的庫:StartUp-Protector:(github.com/liuzhao2007…),使用簡單方便、侵入性低、功能完善、定製化強,歡迎使用:
歡迎關注微信公衆號:按期分享Java、Android乾貨!