1. 程式人生 > >線程的兩種睡眠方法&ANR(進程/服務無響應)

線程的兩種睡眠方法&ANR(進程/服務無響應)

時間 運行 睡眠 tro 執行 方法 如果 服務 一段

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的原因

默認情況下,在android中Activity的最長執行時間是5秒,BroadcastReceiver的最長執行時間則是10秒。超出就會提示應用程序無響應(ANR:Application Not Responding)對話框。

三種常見類型

1:KeyDispatchTimeout(5 seconds) --主要類型

  (Activity內主線程5s內無響應) 按鍵或觸摸事件在特定時間內無響應

2BroadcastTimeout(10 seconds)

  (BroadcastReceiver 10s) BroadcastReceiver在特定時間內無法處理完成

3:ServiceTimeout(20 seconds) --

小概率類型

  (Service 20s) Service在特定的時間內無法處理完成

  Service運行在主線程中,不可以做耗時操作,會導致ANR(20s),如果需要在服務中做耗時操作,需要開子線程

線程的兩種睡眠方法&ANR(進程/服務無響應)