1. 程式人生 > >ANR產生的原因及如何避免?

ANR產生的原因及如何避免?

 ANRApplication Not Responding------原因:

1)長時間的I/O處理,比如讀寫大檔案,網路訪問時造成的阻塞。

2)執行耗時的運算,Android預設為超過5000ms5秒開始彈出ANR視窗,某些應用可能首次執行時沒有快取十分耗時,可以通過Splash播放閃屏Logo等方式來延遲載入。

3ServiceappWidget中也要注意多執行緒的使用,除非它和Activity工作在不同的程序。

避免ANR的方法:

     1.單獨開工作者執行緒,通過獨立的Thread或使用類似AsyncTask的方式來處理耗時的內容。

2.耗時的操作儘量分段處理,使用類似狀態機的方式,類似

Symbian的活動物件將一個複雜事情,分段執行。

3.UI執行緒中不要處理過多的內容。

相關推薦

C語言野指標的產生原因避免辦法

見如下程式例項:#include <stdio.h> #include <stdlib.h> int main() { char *p1 = NULL; printf("

跨域產生原因處理方式

1.跨域產生原因 當前站點頁面訪問當前站點之外的資源 2.產生跨域例子(直接瀏覽器開啟 訪問localhost:8080的資源) <!DOCTYPE html> <html> <head> <title>跨域</titl

Linux環境下段錯誤的產生原因除錯方法小結(轉)

轉自 最近在Linux環境下做C語言專案,由於是在一個原有專案基礎之上進行二次開發,而且專案工程龐大複雜,出現了不少問題,其中遇到最多、花費時間最長的問題就是著名的“段錯誤”(Segmentation Fault)。藉此機會系統學習了一下,這裡對Linux環境下的段錯誤

移動端1px產生原因解決之道

產生原因     因為Retine屏的解析度始終是普通螢幕的2倍,1px的邊框在devicePixelRatio=2的retina屏下會顯示成2px,所以在高清瓶下看著1px總是感覺變胖了,關於詳細原因介紹參考大漠的文章:http://www.w3cplus.com/css

AJAX跨域產生原因解決方法

什麼是跨域:        跨域問題來源於JavaScript的同源策略,即只有 協議+主機名+埠號 (如存在)相同,則允許相互訪問。也就是說JavaScript只能訪問和操作自己域下的資源,不能訪問和操作其他域下的資源。跨域問題是針對JS和ajax的,html本身沒有跨域問

Linux的殭屍程序產生原因解決方法

來源:http://www.blogdaren.com/post-882.html 1. 產生原因:     在UNIX 系統中,一個程序結束了,但是他的父程序沒有等待(呼叫wait / waitpid)他,那麼他將變成一個殭屍程序。通過ps命令檢視其帶有defunc

Android OOM產生原因如何解決

OOM產生原因 OOM產生可能的原因是因為 1、載入大圖片導致記憶體溢位 2、大量記憶體洩露 OOM產生的本質是什麼呢? Dalvik VM主要管理的記憶體 Java heap,由於手機裝置的限制,一般一個應用使用的記憶體不能超過預設值 32M(不

各種異常產生原因如何處理解決

異常:nested exception is java.lang.IncompatibleClassChangeError: Implementing class 原因:由於jar包衝突引發的異常。導致不相容。 異常:nested exception is java.la

Content is not allowed in prolog異常產生原因處理方式

web專案在啟動的時候報Content is not allowed in prolog錯誤,後經檢查發現是web專案在使用dom4j/sax 讀取一個xml檔案時報錯。  原因如下:BOM(Byte Order Mark),是UTF編碼方案裡用於標識編碼的標準標記,在UT

死鎖的定義 產生原因 必要條件 避免死鎖和解除死鎖的方法

                1.死鎖:如果一組程序中的每一個程序都在等待僅由該組程序中的其它程序才能引發的事件,那麼該組程序是

基於android7.0流程分析anr產生原因

1.什麼是anr ANR(Application Not Responding),即“應用程式無響應”。anr是android自身的一種監測機制,如果ui執行緒在特定時間無法對輸入事件做出響應或則對特定操作沒有執行完畢,就會出現anr的情況。 2.anr分類 1,Input

記憶體碎片產生原因解決辦法

首先,使用最原始的標記分配方法,系統需要維護一個簡單的記憶體資訊表: 當程式申請一個長度為3的記憶體空間後: 當程式再申請一個長度為2,以及長度為4的記憶體空間後:此時,只剩1個可用空間。如果這時程式再來申請長度大於1的空間,就申請不了,也就是記憶體不夠。 現在,釋放掉ID=2的空間:我們發現,現在可用記憶體

MongoDB 連線數高產生原因解決

MongoDB Sharding架構下連線數很容易達到很高,這裡連線數分為幾個概念: tcp 連線數 netstat可以統計的,一般這個是最高.如果mongod/mongos在同一臺伺服器,更明顯。 參考命令:netstat -ant|awk '{print $5}' |awk -F: '{print $1

Time Limit Exceeded的原因避免方法

經常會遇到這種令人抓狂的情況 自己編寫的程式在codeblocks上怎麼編譯執行都能輸出正確結果 然而一提交,卻無法Accept,很多時候顯示的並不是Wrong Answer 而是比WrongAnswer更令人絕望的  。 在oj中,給定的Time Limit 是1

記憶體碎片產生原因終極解決辦法

首先,使用最原始的標記分配方法,系統需要維護一個簡單的記憶體資訊表: 當程式申請一個長度為3的記憶體空間後: 當程式再申請一個長度為2,以及長度為4的記憶體空間後:此時,只剩1個可用空間。如果這時程式再來申請長度大於1的空間,就申請不了,也就是記憶體不夠。 現在,釋放掉ID=2的空間:我們發現,現在可用記憶體

Android ANR產生原因和解決辦法

1、主執行緒中,程式應該儘量少進行程式執行,Activity應該在它的關鍵生命週期方法(如onCreate()和onResume())裡儘可能少的去做建立操作。(可以採用重新開啟子執行緒的方式,然後使用Handler+Message的方式做一些操作,比如更新主執行緒中的ui等) 2、應用程式應該避免在Broa

Linux環境下段錯誤(Segmentation fault)的產生原因除錯方法小結

最近在Linux環境下做C語言專案,由於是在一個原有專案基礎之上進行二次開發,而且專案工程龐大複雜,出現了不少問題,其中遇到最多、花費時間最長的問題就是著名的“段錯誤”(Segmentation Fault)。藉此機會系統學習了一下,這裡對Linux環境下的段錯誤做個小結,

SQL Server死鎖產生原因解決辦法

其實所有的死鎖最深層的原因就是一個:資源競爭 表現一:   一個使用者A 訪問表A(鎖住了表A),然後又訪問表B,另一個使用者B 訪問表B(鎖住了表B),然後企圖訪問表A,這時使用者A由於使用者B已經鎖住表B,它必須等待使用者B釋放表B,才能繼續,好了他老人家就只好老老實實

記憶體碎片產生原因處理

  記憶體碎片是因為在分配一個記憶體塊後,使之空閒,但不將空閒記憶體歸還給最大記憶體塊而產生的。最後這一步很關鍵。如果記憶體分配程式是有效的,就不能阻止系統分配記憶體塊並使之空閒。即使一個記憶體分配程式不能保證返回的記憶體能與最大記憶體塊相連線(這種方法可以徹底避免記憶體碎片問題),但你可以設法控制並限制記憶

Linux環境下段錯誤的產生原因除錯方法小結

最近在Linux環境下做C語言專案,由於是在一個原有專案基礎之上進行二次開發,而且專案工程龐大複雜,出現了不少問題,其中遇到最多、花費時間最長的問題就是著名的“段錯誤”(Segmentation Fault)。藉此機會系統學習了一下,這裡對Linux環境下的段錯誤做個小結