Android中对付ANR的N种武器
生活随笔
收集整理的這篇文章主要介紹了
Android中对付ANR的N种武器
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
以前做Android系統(tǒng)開(kāi)發(fā),一般很少寫(xiě)程序。現(xiàn)在到一公司做Android互聯(lián)網(wǎng)應(yīng)用,程序中不時(shí)出現(xiàn)一些ANR。
上峰對(duì)ANR非常的關(guān)注,期望我能徹底解決該項(xiàng)目的ANR。⊙﹏⊙b汗!
因此我對(duì)ANR進(jìn)行了些思考,并和剛從騰訊QQ項(xiàng)目組跳槽來(lái)公司北京總部的某架構(gòu)師同事進(jìn)行了探討。他也基本認(rèn)同我的觀點(diǎn)。
現(xiàn)將我應(yīng)對(duì)ANR的思路整理如下:
一、在項(xiàng)目之前,應(yīng)該確保工程師理解產(chǎn)生ANR的基本原理,Handler的基本原理,明白一些主要回調(diào)函數(shù)的執(zhí)行線程。如果工程師還沒(méi)達(dá)到這些要求,應(yīng)該通過(guò)培訓(xùn)等方式盡量讓工程師了解這些知識(shí)。 關(guān)于這些技術(shù)的知識(shí)可參考《關(guān)于ANR的官方建議》和《Android線程模型》和《Looper和Handler》 二、如果程序在初始化階段較耗時(shí),考慮顯示一splash屏或者盡快讓主視圖快速顯示處理,然后才顯示其他的視圖。不管是哪一種情況,應(yīng)該設(shè)法表明程序正在往前執(zhí)行,以免用戶(hù)覺(jué)得應(yīng)用凍結(jié)了。 三、在進(jìn)行架構(gòu)設(shè)計(jì)時(shí),架構(gòu)師應(yīng)該盡量采用MVC架構(gòu),另外一定要清楚那些代碼應(yīng)該是在主線程中執(zhí)行,那些代碼應(yīng)該是在非主線程中執(zhí)行。當(dāng)然要做好框架也不容易啊!⊙﹏⊙b汗! 四、對(duì)于已處于項(xiàng)目中后期,而沒(méi)有采用MVC框架,或者采用了MVC框架但其實(shí)現(xiàn)并不太好的項(xiàng)目,應(yīng)該畫(huà)出其整體框架圖,時(shí)序圖等進(jìn)行分析,盡量采用較小的代價(jià),逐步迭代的方式讓其項(xiàng)目最后達(dá)到良好的MVC架構(gòu)。對(duì)于我們的當(dāng)前項(xiàng)目,我正試圖使用該方式來(lái)最大程度的避免ANR。也不知道最后能不能達(dá)到很好的效果。 五、在進(jìn)行編碼時(shí),工程師一定要考慮當(dāng)前代碼死否在主線程中執(zhí)行;當(dāng)前代碼是否是耗時(shí)操作; 線程對(duì)鎖的競(jìng)爭(zhēng)是否可能造成代碼的等待,而耗時(shí)太多;代碼是否可能造成死鎖,而產(chǎn)生ANR。 六、如果應(yīng)用程序中使用了第三方的應(yīng)用程序,請(qǐng)把這些第三方的應(yīng)用程序做為單獨(dú)的進(jìn)程來(lái)處理,以避免它的不良代碼而造成本項(xiàng)目出現(xiàn)ANR。關(guān)于此技術(shù)請(qǐng)參考《Android中單APK應(yīng)用多進(jìn)程》 七、在程序運(yùn)行時(shí),出現(xiàn)了ANR,工程師應(yīng)該通過(guò)/data/anr/traces.txt并結(jié)合代碼,進(jìn)行ANR的分析。 八、在項(xiàng)目中后期,你可以使用?StrictMode?來(lái)幫助你在主線程中查找潛在的耗時(shí)操作,比如對(duì)網(wǎng)絡(luò)或數(shù)據(jù)庫(kù)操作。 九、在項(xiàng)目后期,應(yīng)該通過(guò)monkey等來(lái)進(jìn)行壓力測(cè)試,找出潛在的ANR,并進(jìn)行修改。 關(guān)于monkey的使用請(qǐng)參考《Android的monkey用法》 十、對(duì)于一些重要的ANR及不良代碼,要進(jìn)行歸納和總結(jié),形成文檔,以便分享給其他的同事或項(xiàng)目組,并作為新員工的培訓(xùn)資料。
總結(jié)
每當(dāng)產(chǎn)生ANR我們可以根據(jù)/data/anr/traces.txt分析解決,但這個(gè)頑疾很難從根本上解決,只有通過(guò)引入好的框架(比如MVC框架),提升開(kāi)發(fā)工程師認(rèn)知,技術(shù)積累去避免。
總結(jié)
以上是生活随笔為你收集整理的Android中对付ANR的N种武器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 消除魔鬼数字方法_消除Java
- 下一篇: Android Studio中进行单元测