android異常捕獲
⑴ android 怎麼捕獲app異常閃退的日誌
1、通過集成第三方SDK,如網路統計、友盟統計等
2、發版時使用加固工具,他們也會收集錯誤日誌,如360加固
3、在程序中添加程序異常崩潰的捕捉代碼,保存到本地文件中。
⑵ android studio怎麼捕獲異常
catch Exception{
}
⑶ android測試 app 閃退 怎麼捕獲日誌
比如說,你內存有泄露的情況,比如說你發生了異常,而又沒有被處理,就會發生閃退的情況。 仔細檢查一下你的代碼。 或者做好全局的異常捕獲,及時將日誌上傳到服務端進行分析。
⑷ Android本身的api並未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,會導致什麼問題如何解決
這個是有可能的,舉個例子int x = 10/0;這個就會拋出異常的,因為0是不能作為除數的,這也將導致程序崩潰退出。
因此,在程序中不確定的地方應該多進行if語句的判斷,適當加入try...catch語句進行異常的捕獲。
⑸ 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 runtimeexception 可以捕獲嗎
首先先新建一個類,命名為CrashHandler,然後輸入以下代碼:
{
privateContextmContext;
voidinit(Contextcontext){
mContext=context;
Thread.(this);
}
@Override
publicvoincaughtException(Threadp1,Throwablep2){
//TODO:Implementthismethod
}
}
然後在你的Application或Activity中的onCreate方法中添加這一行代碼:
java">CrashHandlercrash=newCrashHandler();
crash.init(getApplicationContext());
到此,當你的應用在運行時出現異常時就能捕獲到了
⑺ 使用android studio 報這個異常什麼原因
//可以使用try catch finally語句來捕獲異常。
//代碼格式:
try{
//如果要捕獲異常,需要將代碼放置在這try的代碼塊范圍內
}catch(IOException ex){//異常范圍IOException 以及它的派生類異常
//此處編寫發生 IOException 或其派生類異常時處理方案
}catch(Exception ex){//異常范圍Exception 以及它的派生類異常
//此處編寫發生Exception 或其派生類異常時處理方案
}finally{
//此處無論上方的代碼中是否出現了異常、return語句,這里必定執行。
}
⑻ 如何監控android系統中其他程序的崩潰信息
哎呦 想想每次我們APP崩潰的時候都會彈出一個對話框,這說明系統已經捕獲到了崩潰異常,所以我們可以追蹤系統是怎麼捕獲到的
⑼ exceptionhandler為什麼可以捕獲父級異常,捕獲不到子級異常
Android開發過程中,大量使用了線程,當子線程出現崩潰的時候那麼會將異常向上拋出,最後就會將異常拋到主線程,那麼此時在主線程中對該異常進行處理就ok啦。可是如果就是簡單的捕獲處理是辦不到的,還是會導致程序的異常退出。所以用UncaughtExceptionHandler類就能夠捕獲大部分的運行時異常了。
⑽ 捕獲到異常怎麼處理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
大家還等什麼呢?趕緊在自己的應用裡面添加上默認未處理異常處理器吧!再也不會因為異常未捕獲發生程序崩潰了。。^_^