因爲接觸android開發的時間並不久,對於android系統、機制的理解也是隻知其一;不知其二。因此在開發中陸陸續續遇到不少莫名其妙的問題,其中最讓人頭疼的就是application crash。application的crash可能因爲不少的緣由所引發的,有多是由於數據的問題,或者是異步AsyncTask的運用不合理,等等等等,均可能形成application crash。 java
也一直在想如何才能知道application crash,想在application crash的時候作點什麼,一直也沒有找到一個solution。後來在一個偶然的機會用到一個別人的application能夠捕獲到crash,就想撿到了寶同樣。想盡辦法去找到這個application的sourcecode,發現原來很簡單,幾句話就能夠作到。 android
1. 在Activity的onCreate方法裏面添加這句話: app
Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler(this)); 異步
@Override
2. 寫一個本身的MyUncaughtExceptionHandler implementes UncaughtExceptionHandler,實現方法uncaughtException。在這個方法裏面作任何想作的事情,好比說將形成application crash的緣由發送給開發人員。 ide
public class UncaughtExceptionHandler implements
java.lang.Thread.UncaughtExceptionHandler {
private Context con_;
public UncaughtExceptionHandler(Context con){
this.con_ = con;
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
StringWriter sw = new StringWriter();
ex.printStackTrace(new PrintWriter(sw));
System.err.println(sw);
Intent bugReportIntent = new Intent(con_, BugReportActivity.class);
bugReportIntent.putExtra(BugReportActivity.exceptionMsg, sw.toString());
con_.startActivity(bugReportIntent);
Process.killProcess(Process.myPid());
System.exit(10);
}
}
學習
3. 寫一個本身的Activity,告訴用戶,你須要這個exception信息,讓他Email給開發人員。 this
public class BugReportActivity extends Activity {
public static final String exceptionMsg = "exceptionMsg";
private TextView reportContent;
private Button sendMailBtn;
private Button cancelBtn;
protected void onCreate(Bundle bundle){
super.onCreate(bundle);
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler(this));
setContentView(R.layout.bug_report);
reportContent = (TextView)findViewById(R.id.reportContent);
sendMailBtn = (Button)findViewById(R.id.sendMail);
cancelBtn = (Button)findViewById(R.id.cancel);
String sw = getIntent().getStringExtra(exceptionMsg);
reportContent.setText(sw);
initHandler();
}
private void initHandler(){
sendMailBtn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Email will be sent to our helpdesk.", Toast.LENGTH_LONG).show();
}
});
cancelBtn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
finish();
}
});
}
}
google
一直都是看別人的blog學習東西的,今天第一次發個blog。有什麼很差的地方請你們見諒。:-) spa
發現一個GoogleProject專門關注這個Application Crash Report for Android的,簡稱ACRA.你們能夠在下面這個連接上面找到相關內容。 code