Android OS用のアプリケーションを開発しています。これは最初のアプリケーションなので、プログラミングの間違いを犯したため、バグを原因までたどることができません。推測して、バグを修正しようとしているときに、アクティビティのライフサイクル全体ですべてのタイプの例外を1つのtry-catchでキャッチする方法はありますか?
それは素晴らしいでしょう、私は私の銀河Sを見るのに飽きてきましたS:「申し訳ありませんが、アプリケーションアプリが予期せず停止しました」:(
私は本当に、これはお勧めしません...
try {
...
} catch (Exception e) {
// This will catch any exception, because they are all descended from Exception
}
問題をデバッグするためにスタックトレースを見ていますか?それらを追跡することは難しくありません。 LogCatを見て、赤いテキストの大きなブロックを確認して、クラッシュの原因となったメソッドとエラーを確認します。
この方法ですべてのエラーをキャッチすると、プログラムは期待どおりに動作せず、ユーザーがレポートしたときにAndroid Marketからエラーレポートが届きません。
UncaughtExceptionHandlerを使用すると、クラッシュを防ぐことができます。私は1つを使用していますが、コンピューターから離れた電話でアプリをデバッグしているときのために、スタックトレースをファイルに出力するためだけに使用します。しかし、キャッチした例外をデフォルトのAndroid UncaughtExceptionHandlerに渡しました。これは、Androidで正しく処理できるようにするためです。ユーザーにスタックトレースを送信する機会を与えます。
Eclipseを使用している場合は、アプリを強制終了するすべての例外(別名メッセージ)を「LogCat」に記録する必要があります。
LogCatを表示する最も簡単な方法は、DDMSパースペクティブを開き、[LogCat]タブをクリックします(まだ表示されていない場合は、[表示]メニューから開きます)。
import Java.io.FileOutputStream;
import Java.io.IOException;
import Android.app.Activity;
import Android.content.Context;
public class SRSDexception implements Thread.UncaughtExceptionHandler {
private Thread.UncaughtExceptionHandler defaultUEH;
private Activity app = null;
public SRSDexception(Activity app) {
this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
this.app = app;
}
public void uncaughtException(Thread t, Throwable e)
{
StackTraceElement[] arr = e.getStackTrace();
String Raghav =t.toString();
String report = e.toString()+"\n\n";
report += "--------- Stack trace ---------\n\n"+Raghav;
for (int i=0; i<arr.length; i++)
{
report += " "+arr[i].toString()+"\n";
}
report += "-------------------------------\n\n";
// If the exception was thrown in a background thread inside
// AsyncTask, then the actual exception can be found with getCause
report += "--------- Cause ---------\n\n";
Throwable cause = e.getCause();
if(cause != null) {
report += cause.toString() + "\n\n";
arr = cause.getStackTrace();
for (int i=0; i<arr.length; i++)
{
report += " "+arr[i].toString()+"\n";
}
}
report += "-------------------------------\n\n";
try {
FileOutputStream trace = app.openFileOutput(
"stack.trace", Context.MODE_PRIVATE);
trace.write(report.getBytes());
trace.close();
} catch(IOException ioe) {
// ...
}
defaultUEH.uncaughtException(t, e);
}
}