<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 93,  comments - 2,  trackbacks - 0
    ANR(Application Not Responding)
        ANR定義:在Android上,如果你的應(yīng)用程序有一段時(shí)間響應(yīng)不夠靈敏,系統(tǒng)會(huì)向用戶顯示一個(gè)對(duì)話框,這個(gè)對(duì)話框稱作應(yīng)用程序無(wú)響應(yīng)對(duì)話框(ANR:Application Not Responding),用戶可以選擇“等待”讓應(yīng)用程序繼續(xù)運(yùn)行,也可以選擇“強(qiáng)制關(guān)閉”。所以一個(gè)順暢合理的應(yīng)用程序不會(huì)出現(xiàn)ANR,而讓用戶處理這個(gè)對(duì)話框。因此,在程序里對(duì)響應(yīng)性能的設(shè)計(jì)很重要,這樣系統(tǒng)不會(huì)顯示ANR給用戶。
        默認(rèn)情況下,Android的Activity執(zhí)行時(shí)間為5s,BroadcastReceiver的最長(zhǎng)執(zhí)行時(shí)間為10s.
        第一,什么會(huì)引發(fā)ANR
        在Android里,應(yīng)用程序響應(yīng)由Activity Manager和WindowManager系統(tǒng)服務(wù)監(jiān)視的,當(dāng)它監(jiān)聽(tīng)到一下一種情況時(shí),Android就會(huì)針對(duì)特定的應(yīng)用程序顯示ANR:
        1).在5秒內(nèi)沒(méi)有響應(yīng)輸入事件(例如,按鍵按下,屏幕觸摸)
        2).BroadcastReceiver在10秒內(nèi)沒(méi)有執(zhí)行完畢
        造成以上兩點(diǎn)多原因有很多,比如在主線程中做非常耗時(shí)的操作,比如下載,IO異常等。

        潛在的耗時(shí)操作,例如網(wǎng)絡(luò)或數(shù)據(jù)庫(kù)操作或者高耗時(shí)的計(jì)算如改變位圖尺寸,這些操作應(yīng)該放在子線程中(或者以數(shù)據(jù)庫(kù)為例,通過(guò)異步請(qǐng)求的方式)來(lái)完成,然而,不是說(shuō)你的主線程阻塞在那里等待子線程來(lái)完成--也不用調(diào)用Thread.wait()或Thread.sleep();替代的方法是主線程需要為子線程提供一個(gè)handler,以便完成時(shí)能夠交給主線程,以這種方式設(shè)計(jì)你的應(yīng)用程序,將能保證你的主線程保持對(duì)輸入的響應(yīng)性并能避免由于5秒輸入事件的超時(shí)引發(fā)的ANR對(duì)話框。
        第二,如何避免ANR
        1.運(yùn)行在主線程里的任何方法都盡可能少做事情。特別是,Activity應(yīng)該在它的關(guān)鍵生命周期方法(如onCreate()和onResume())里盡可能少的去做創(chuàng)建操作。(可以采用重新開(kāi)啟子線程的方式,然后使用Handler+Message的方式做一些操作,比如更新主線程中的ui等)
        2.應(yīng)用程序應(yīng)該避免在BroadcastReceiver里做耗時(shí)的操作或計(jì)算。但不再是在子線程里做這些任務(wù)(因?yàn)?BroadcastReceiver的生命周期短),替代的是,如果響應(yīng)Intent廣播需要執(zhí)行一個(gè)耗時(shí)的動(dòng)作的話,應(yīng)用程序應(yīng)該啟動(dòng)一個(gè) Service。(此處需要注意的是可以在廣播接受者中啟動(dòng)Service,但是卻不可以在Service中啟動(dòng)broadcasereciver,關(guān)于原因后續(xù)會(huì)有介紹,此處不是本文重點(diǎn))
        3.避免在Intent Receiver里啟動(dòng)一個(gè)Activity,因?yàn)樗鼤?huì)創(chuàng)建一個(gè)新的畫面,并從當(dāng)前用戶正在運(yùn)行的程序上搶奪焦點(diǎn)。如果你的應(yīng)用程序在響應(yīng)Intent廣 播時(shí)需要向用戶展示什么,你應(yīng)該使用Notification Manager來(lái)實(shí)現(xiàn)。

        總結(jié):anr異常也是在程序中自己經(jīng)常遇到的問(wèn)題,主要的解決辦法自己最常用的就是不要在主線程中做耗時(shí)的操作,而應(yīng)放在子線程中來(lái)實(shí)現(xiàn),比如采用Handler+mesage的方式,或者是有時(shí)候需要做一些和網(wǎng)絡(luò)相互交互的耗時(shí)操作就采用asyntask異步任務(wù)的方式(它的底層其實(shí)Handler+mesage有所區(qū)別的是它是線程池)等,在主線程中更新UI。
    posted on 2015-06-24 16:00 Terry Zou 閱讀(313) 評(píng)論(0)  編輯  收藏 所屬分類: Android
    <2015年6月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    收藏夾

    Java

    搜索

    •  

    最新隨筆

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲情A成黄在线观看动漫软件| 精品久久久久久亚洲中文字幕| 久久久久久久久免费看无码 | 黄网站色成年片大免费高清| 精品国产亚洲男女在线线电影| 久久久久久AV无码免费网站下载| 亚洲人成网站在线观看播放青青| 四虎影视永久免费观看| 国产精品免费AV片在线观看| 亚洲熟妇成人精品一区| 亚洲色婷婷综合久久| 巨胸喷奶水视频www网免费| EEUSS影院WWW在线观看免费| 亚洲国产精品综合久久2007| 亚洲第一页日韩专区| 亚洲国产精品国自产拍AV| 99久久这里只精品国产免费| 亚洲免费无码在线| 亚洲一区二区三区精品视频| 久久精品国产精品亚洲| 成人午夜18免费看| 日本不卡免费新一区二区三区| 国产成人亚洲综合a∨| 亚洲神级电影国语版| 亚洲午夜精品第一区二区8050| 日韩精品无码区免费专区| 免费无码一区二区三区蜜桃| 国产精品亚洲专区无码牛牛| 亚洲国产精品综合久久2007| 亚洲日韩精品一区二区三区| 国产美女无遮挡免费网站| 啦啦啦完整版免费视频在线观看| 一级成人a免费视频| 亚洲熟妇AV一区二区三区浪潮 | 国产精品福利在线观看免费不卡| 色偷偷女男人的天堂亚洲网| 亚洲AV无码专区在线播放中文| 免费成人av电影| 午夜精品在线免费观看| 亚洲毛片在线免费观看| 免费观看在线禁片|