答:ANR的定义:在<em>android</em>上,如果你的应用程序有一段时间响应不移灵敏,系统会向用户提示“应用程序无响应”(ANR:application Not Responding)对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示
2021-05-29 19:00:44
什麼是ANR,如何避免?
答:ANR的定義:在android上,如果你的應用程式有一段時間響應不移靈敏,系統會向用戶提示「應用程式無響應」(ANR:application Not Responding)對話方塊。因此,在程式裡對響應效能的設計很重要,這樣,系統不會顯示ANR給使用者。
如何避免:
首先來研究下為什麼它會在android的應用程式裡發生和如何最佳構建應用程式來避免ANR.
android應用程式通常是運行在一個單獨的執行緒(例如:main)裡,這就意味你的應用程式所做的事情如果在主執行緒裡佔用了大長時間的話,就會引發ANR對話方塊,因為你的應用程式並沒有給自己機會來處理輸入事件或者Intent廣播。因此,運行在主執行緒裡的任何訪求都儘可能少做事情。特別是,activity應該在它的關鍵生命週期方法(onCreate()和onResume())裡儘可能少地去作創建操作。潛在的耗時操作,例如網路或資料庫操作,或者高耗時的計算如改變點陣圖尺寸,應該在子執行緒裡(或者以資料庫操作為例,通過非同步請求的方式)來完成。然而,不是說你的主執行緒阻塞在那裡等待子執行緒的完成---也不是呼叫Thread.wait()或者Thread.sleep()。替代的方法是:主執行緒應該為子執行緒提供一個Handler,以便完成時能夠提交給主執行緒。以這種方式設計你的應用程式,將能保證你的主執行緒保持對輸入的響應性並能避免由5秒輸入事件的超時引發的ANR對話方塊。這種做法應該在其它顯示UI的執行緒裡效仿,因為它們都受相同的超時影響。
IntentReceiver執行時間的特殊限制意味著它應該做:在後臺裡做小的、瑣碎的工作,如儲存設定或註冊一個Notification。和在主執行緒裡呼叫的其它方法一樣,應用程式應該避免在BroadcastReceiver裡做耗時的操作或計算,但也不是在子執行緒裡做這些任務(因為BroadcastReceiver的生命週期短),替代的是,如果響應Intent廣播需要執行一個耗時的動作的話,應用程式應該啟動一個Service。順便提及一句,你也應該避免在Intent Receiver裡啟動一個Activity,因為它會創建一個新的畫面,並從當前使用者正在運行的程式上搶奪焦點。如果你的應用程式在響應Intent廣播時需要向用戶展示什麼,你應該使用Notification Manager來實現。一般來說,在應用程式裡,100到200ms是使用者能感知阻滯的時間閾值,下面總結了一些技巧來避免ANR,並有助於讓你的應用程式看起來有響應性。如果你的應用程式未響應使用者輸入正在後臺工作的話,可以顯示工作的進度(ProgressBar和ProgressDialog對這種情況來說很有用)。特別是遊戲,在子執行緒裡做移動的計算。如果你的程式有一個耗時的初始化過程的話,考慮可以顯示一個Splash Screen或者快速顯示主畫面並非同步來填充這些資訊。在這兩種情況下,你都應該顯示正在進行的進度,以免使用者認為程式被凍結了。
一般來說,在應用程式裡,100到200ms是使用者能感知阻滯的時間閾值,下面總結了一些技巧來避免ANR,並有助於讓你的應用程式看起來有響應性。如果你的應用程式未響應使用者輸入正在後臺工作的話,可以顯示工作的進度(ProgressBar和ProgressDialog對這種情況來說很有用)。特別是遊戲,在子執行緒裡做移動的計算。如果你的程式有一個耗時的初始化過程的話,考慮可以顯示一個Splash Screen或者快速顯示主畫面並非同步來填充這些資訊。在這兩種情況下,你都應該顯示正在進行的進度,以免使用者認為程式被凍結了。
相關文章
答:ANR的定义:在<em>android</em>上,如果你的应用程序有一段时间响应不移灵敏,系统会向用户提示“应用程序无响应”(ANR:application Not Responding)对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示
2021-05-29 19:00:44
在这点上,Z6巅峰版也是考虑得很周全。整个手表只在表盘一侧有个按钮,开关机都是长按,短按则是亮屏或息屏。这种操作方式跟<em>iPad</em>、iPhone相似,对于用惯了电子产品的小孩而言,上手没有一点难度。必须要重点夸一下Z6
2021-05-29 19:00:11
充电盒正面有个可显现绿橘白三色的指示灯,vivo LOGO以及实体按钮。连接方式还是照旧,与vivo和iQOO配对时可以显示连接动画和实时电量,与其他<em>Android</em>手机连接也能在设备界面看到电量。更值得点赞的是,vivo TWS 2
2021-05-29 18:32:33
虽然在车机功能上不像国产顶配车那样丰富,但是在整个同级别车型之中,却是唯一支持<em>Android</em> Auto互联功能的系统。奥迪S4还配备了带腿托的真皮运动座椅,同时还具备连宝马M3都没有具备的按摩功能。除了能够体验
2021-05-29 18:32:00
为了解决这个问题,我现在出门前都会带上一件隔脏睡袋,有以下这个几个理由:1、轻巧便携。这种睡袋折叠后仅仅一个<em>iPad</em>的容量,不会占用太多行李空间,如果是单人款睡袋,更是轻盈无比,仅有1瓶水的重量,携带起来特别方便
2021-05-29 18:31:48
M1版<em>iPad</em> Pro有3个遗憾:mini LED有不少瑕疵,M1芯片无用武之地,不能安装macOS。M1芯片引爆了一个未曾设想的问题:我们都无法原谅,一颗媲美桌面端i9的顶级芯片,居然只能用来打游戏。 屏幕瑕疵是次要的,<em>iPa
2021-05-29 18:30:59