線程的兩種睡眠方法&ANR(進程/服務無響應)
阿新 • • 發佈:2017-05-21
時間 運行 睡眠 tro 執行 方法 如果 服務 一段
默認情況下,在android中Activity的最長執行時間是5秒,BroadcastReceiver的最長執行時間則是10秒。超出就會提示應用程序無響應(ANR:Application Not Responding)對話框。
小概率類型
1 method1: try { 2 Thread.sleep(3000); 3 } catch (InterruptedException e) { 4 e.printStackTrace(); 5 } 6 method2: SystemClock.sleep(3000);
ANR(Application Not Responding)
在Android上,如果應用程序有一段時間響應不夠靈敏,系統會向用戶顯示一個對話框,這個對話框稱作應用程序無響應(ANR:Application Not Responding)對話框。用戶可以選擇“等待”而讓程序繼續運行,也可以選擇“強制關閉”。所以一個流暢的合理的應用程序中不能出現anr,而讓用戶每次都要處理這個對話框。因此,在程序裏對響應性能的設計很重要,這樣系統不會顯示ANR給用戶。出現ANR的原因
三種常見類型
1:KeyDispatchTimeout(5 seconds) --主要類型
(Activity內主線程5s內無響應) 按鍵或觸摸事件在特定時間內無響應
2:BroadcastTimeout(10 seconds)
(BroadcastReceiver 10s) BroadcastReceiver在特定時間內無法處理完成
3:ServiceTimeout(20 seconds) --
(Service 20s) Service在特定的時間內無法處理完成
Service運行在主線程中,不可以做耗時操作,會導致ANR(20s),如果需要在服務中做耗時操作,需要開子線程
線程的兩種睡眠方法&ANR(進程/服務無響應)