ANR詳細說明請參考官網,會出現ANR的2個時機是
(1)程式對使用者的輸入(按實體按鍵或是螢幕),超過5秒沒有反應
(2)BroadReceiver超過10秒還沒結束。
BroadReceiver 因為這個特性,所以不應該在收到Broadcast後做太多費時的工作。正確在收到Receiver後,service或是透過notification 去執行就要去執行某個activity....等其他相對應的工作。注意,不要直接執行activity而要透過notification,讓使用者自行 決定是否要去執行activity。否則activity忽然跑出來螢幕上會讓使用者原本操作的程式被中斷,這是不好的使用者操作經驗,要適情況避免!
避免ANR並給使用者好的操作方式 ,建議三點:
(1)呈現等待的畫面 (例如: progress bar)
(2)使用子線程
(3) 如果是在程式初始畫面即有大量運算或等待的情況時,要用asynchronously的方式來改變UI。舉例來說程式一開始執行時會透過網路下載30張小 圖片到畫面上時,可以每下載一張圖片完成,就先把這張圖片秀到畫面上,而不是30張都下載完了才一口氣全部秀到畫面上。
(1)程式對使用者的輸入(按實體按鍵或是螢幕),超過5秒沒有反應
(2)BroadReceiver超過10秒還沒結束。
BroadReceiver 因為這個特性,所以不應該在收到Broadcast後做太多費時的工作。正確在收到Receiver後,service或是透過notification 去執行就要去執行某個activity....等其他相對應的工作。注意,不要直接執行activity而要透過notification,讓使用者自行 決定是否要去執行activity。否則activity忽然跑出來螢幕上會讓使用者原本操作的程式被中斷,這是不好的使用者操作經驗,要適情況避免!
避免ANR並給使用者好的操作方式 ,建議三點:
(1)呈現等待的畫面 (例如: progress bar)
(2)使用子線程
(3) 如果是在程式初始畫面即有大量運算或等待的情況時,要用asynchronously的方式來改變UI。舉例來說程式一開始執行時會透過網路下載30張小 圖片到畫面上時,可以每下載一張圖片完成,就先把這張圖片秀到畫面上,而不是30張都下載完了才一口氣全部秀到畫面上。
沒有留言:
張貼留言