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