随時随地閱讀更多技術實戰幹貨,擷取項目源碼、學習資料,請關注源代碼社群公衆号(ydmsq666)、QQ技術交流群(183198395)。
在某些意外的情況下,程式崩潰是我們不想看到的,這時我們可以使用未捕獲異常,将日志寫在檔案裡,記錄錯誤資訊,防止影響使用者體驗。
package com.home.testuncatch;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.home.testuncaughtexception.R;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyUncaughtExceptionHandler.getInstance().init();
setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.main_btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String a = null;
a.length();
}
});
}
}
MyUncaughtExceptionHandler:
package com.home.testuncatch;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.Thread.UncaughtExceptionHandler;
public class MyUncaughtExceptionHandler implements UncaughtExceptionHandler {
private static MyUncaughtExceptionHandler instance;
public synchronized static MyUncaughtExceptionHandler getInstance() {
if (instance == null) {
instance = new MyUncaughtExceptionHandler();
}
return instance;
}
public void init() {
// 設定目前對象為預設的未捕獲異常處理器
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread t, Throwable e) {
StringWriter stackTrace = new StringWriter();
e.printStackTrace(new PrintWriter(stackTrace));
System.out.println(stackTrace);// 可将錯誤日志寫在檔案裡
System.exit(10);
}
}