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