① androidstudio中怎麼捕獲異常
//可以使用try catch finally語句來捕獲異常。
//代碼格式:
try{
//如果要捕獲異常,需要將代碼放置在這try的代碼塊范圍內
}catch(IOException ex){//異常范圍IOException 以及它的派生類異常
//此處編寫發生 IOException 或其派生類異常時處理方案
}catch(Exception ex){//異常范圍Exception 以及它的派生類異常
//此處編寫發生Exception 或其派生類異常時處理方案
}finally{
//此處無論上方的代碼中是否出現了異常、return語句,這里必定執行。
}
/*
try catch語句至少需要有一個catch,卻可以同時有多個catch。
其中catch語句塊的異常范圍從上到下順序書寫時應當從小范圍到達范圍,如果將Exception的catch與IOException的catch位置對換,那麼永遠不會執行IOException的catch塊的代碼
finally語句代碼塊是可選的。可以有它,也可以不使用它,具體是否啟用它需要根據業務邏輯決定
*/
② 如何監控android系統中其他程序的崩潰信息
哎呦 想想每次我們APP崩潰的時候都會彈出一個對話框,這說明系統已經捕獲到了崩潰異常,所以我們可以追蹤系統是怎麼捕獲到的
③ 捕獲到異常怎麼處理android就不會掛掉
UncaughtExceptionHandler介面
這個介面,顧名思義,就是處理程序中沒有處理的異常,而且是在系統拋出異常導致程序異常終止之前哦!
1. 首先,咱們得創建一個UncaughtExceptionHandler的具體類,比如:
復制內容到剪貼板
代碼:
public class CrashHandler implements UncaughtExceptionHandler {
private static CrashHandler instance; //單例引用,這里我們做成單例的,因為我們一個應用程序裡面只需要一個UncaughtExceptionHandler實例
private CrashHandler(){}
public synchronized static CrashHandler getInstance(){ //同步方法,以免單例多線程環境下出現異常
if (instance == null){
instance = new CrashHandler();
}
return instance;
}
public void init(Context ctx){ //初始化,把當前對象設置成UncaughtExceptionHandler處理器
Thread.(this);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) { //當有未處理的異常發生時,就會來到這里。。
Log.d("Sandy", "uncaughtException, thread: " + thread
+ " name: " + thread.getName() + " id: " + thread.getId() + "exception: "
+ ex);
String threadName = thread.getName();
if ("sub1".equals(threadName)){
Log.d("Sandy", ""xxx);
}else if(){
//這里我們可以根據thread name來進行區別對待,同時,我們還可以把異常信息寫入文件,以供後來分析。
}
}
}
2. 其次,我們自定義Application類
復制內容到剪貼板
代碼:
public class OurApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
CrashHandler handler = CrashHandler.getInstance();
handler.init(getApplicationContext()); //在Appliction裡面設置我們的異常處理器為UncaughtExceptionHandler處理器
}
}
3. 配置AndroidManifest.xml文件
由於我們使用自定義的Application,所以我們要在AndroidManifest.xml文件中申明它
復制內容到剪貼板
代碼:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:name=".OurApplication"
android:debuggable="true"
>
4. 測試
我們在Activity裡面啟動一個線程,然後線程裡面拋出一個異常,看看程序會怎麼樣
復制內容到剪貼板
代碼:
Button btn = (Button) findViewById(R.id.bt);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Log.d("Sandy", "I am a sub thread");
String s = null;
s.toString(); //拋出NullPointException
}
}, "sub thread");
thread.start();
}
5. 結果
由於我們有默認未處理異常的處理程序,所以會列印下面的日誌信息,而不會拋出異常導致程序異常終止
D/Sandy ( 2228): I am a sub thread
D/Sandy ( 2228): uncaughtException, thread: Thread[sub thread,5,main] name: sub thread id: 148exception: java.lang.NullPointerException
大家還等什麼呢?趕緊在自己的應用裡面添加上默認未處理異常處理器吧!再也不會因為異常未捕獲發生程序崩潰了。。^_^
④ android 應用啟動之前,沒有經過activity就崩潰,怎麼捕捉
使用android手機的用戶可能都安裝了任務管理的軟體,使用android手機真的有必要安裝結束任務的軟體嗎? 大家在使用中也都發現了,很多軟體在被結束後,馬上就會又出現在任務列表裡,或是稍等一會自己也會出現,任務管理不停的結束後台程序,也沒見給手機的運行速度帶來多少提升,這是為什麼呢? 其實大家不用那麼在意android手機剩餘內存的大小。很多人都是把使用其他系統的習慣帶到了android手機上,不是所有的智能手機系統都一樣的。android大多數應用沒有退出的設計其實是有道理的,這和系統對進程的調度機制有關系。如果你知道java,就能更清楚這機制了。其實和java的垃圾回收機制類似,系統有一個規則來回收內存。進行內存調度有個閥值,只有低於這個值系統才會按一個列表來關閉用戶不需要的東西。當然這個值默認設置得很小,所以你會看到內存老在很少的數值徘徊。但事實上他並不影響速度。相反加快了下次啟動應用的速度。這本來也是android的優勢之一,如果人為去關閉進程,沒有太大必要。特別是自動關進程的軟體。 可能有人會說了,那為什麼內存少的時候運行大型程序會慢呢?其實很簡單,在內存剩餘不多時打開大型程序,會觸發系統自身的調進程調度策略,這是十分消耗系統資源的操作,特別是在一個程序頻繁向系統申請內存的時候。這種情況下系統並不會關閉所有打開的進程,而是選擇性關閉,頻繁的調度自然會拖慢系統。 那麼,進程管理軟體到底還有存在的價值嗎?其實還是有的,在運行大型程序之前,你可以手動關閉一些進程釋放內存,可以顯著的提高運行速度。但一些小程序,完全可交由系統自己管理。很多朋友還有個疑問,如果不關程序是不是會更耗電?這里也解釋一下,android的應用在被切換到後台時,它其實已經被暫停了,並不會消耗cpu資源,只保留了運行狀態。所以為什麼有的程序切出去重新進入,還會到主界面。但是,一個程序如果想要在後台處理些東西,如音樂播放,它就會開啟一個服務,服務可在後台持續運行,所以在後台耗電的也只有帶服務的應用了。這個在進程管理軟體里能看到,名字是service。所以沒有帶服務的應用在後台是完全不耗電的,沒有必要關閉。這種設計本來就是一個非常好的設計,下次啟動程序時,會更快,因為不需要讀取界面資源,何必要關掉他們抹殺這個android的優點呢? 還有一點,為什麼android應用看起來那麼耗內存?大家知道,android上的應用是java,當然需要虛擬機,而android上的應用是帶有獨立虛擬機的,也就是每開一個應用就會打開一個獨立的虛擬機。這樣設計的原因是可以避免虛擬機崩潰導致整個系統崩潰,但代價就是需要更多內存。 至於為什麼開了大程序或者開了好幾個程序之後切換會變慢,具體分析如下: 已經開啟了一個大程序,佔用70%內存,如果再想運行一個程序,此時還需要50%的內存,則就需要一個從大程序佔用的內存中釋放或者壓縮的過程,所以表現出來的就是慢一會兒。 已經開啟了幾個程序共佔用內存80%,運行新程序時又需要20%的內存,系統內存因為沒見過剩餘0的時候,也就是應該剩一部分空閑內存,那麼就需要從之前開啟的這幾個程序中選擇一個或者幾個來關閉,這一過程也需要耗費系統資源,所以會慢一會兒。也就是說你手動去結束程序的時候,就是替系統在釋放內存,就算你不去結束,在需要內存的時候系統也會自動結束程序釋放內存。 不在後台運行的程序(沒服務的),即使不結束也不會耗電。在後台運行的(有服務的)程序,如一些播放器或實時監控的軟體,自然會耗電。這就說明結束進程並不是沒用,我們只需要看哪個帶服務耗電哪個程序後台一直在運行,看服務就能看出來,這樣的軟體如果用不到的時候就結束了吧。 以QQ舉例,正常的退出,會在進程管理里留下qq的運行過的狀態,但不耗電不佔 cpu,如果你只是切換出去(按房子鍵而不是退出)那麼自然會耗電,因為程序還在運行,QQ還在線呢。 這里就有個要注意的地方了,雖然房子鍵和那個返回鍵都可以將程序切換出去,但是兩者的效果差異是很大的,返回鍵可以視作程序已經退出了,而按房子鍵,則是將程序切換到了後台來運行,軟體並沒有退出哦! 以上這些設計都是為了確保了android的穩定性,正常情況下最多單個程序崩潰,但整個系統不會崩潰,也永遠沒有內存不足的提示出現。大家可能是被windows毒害得太深了,總想保留更多的內存,但實際上這並不一定會提升速度,相反卻喪失了程序啟動快的這一系統特色,得不償失。大家不妨換種觀念習慣來使用android系統
⑤ 為什麼Android應用異常後會自動重啟
就是部分產商優化不夠的問題,有些產商在運用異常後引起 系統的不良反應導致重啟,死機、。
大部分情況下運用異常是不會出現重啟的現象。
⑥ android 怎麼捕獲app異常閃退的日誌
1、通過集成第三方SDK,如網路統計、友盟統計等
2、發版時使用加固工具,他們也會收集錯誤日誌,如360加固
3、在程序中添加程序異常崩潰的捕捉代碼,保存到本地文件中。
⑦ android app崩潰了怎麼辦 如何捕獲崩潰日誌
登錄360加固保官網,360加固保是全球移動應用安全提供商,為應用提供專業的應用加固、崩潰日誌、盜版監測等安全服務。
0【360加固保】Android apk加密詳細步驟
無需集成第三方崩潰SDK,免去開發成本。上傳apk,提交應用加固,勾選「崩潰日誌分析」服務,即可使用應用崩潰服務。
3
應用加固成功後,即可在360加固保的「管理中心」頁查看應用的崩潰情況。提供的崩潰信息包括:崩潰次數、影響用戶數、崩潰率、應用崩潰版本、崩潰的設備、機型等信息,詳細的崩潰堆棧信息。
⑧ 如何獲得Android的崩潰日誌
每個android應用都是由一個Application和多個activity或者server構成.應用啟動時,會首先啟動Application.在Application的onCreate方法中調用
1Thread.(handler);
就可以捕獲導致應用崩潰的錯誤信息了.
首先應用要有讀寫sd卡許可權