アプリがクラッシュしないようにするには、いくつかの例外があります。例外がログやアプリケーションに格納されてクラッシュしないようにしたい。ユーザーに悪い印象を与えるからです。どのように私はこれを達成するのですか?アンドロイドアプリがクラッシュするのを防ぐ方法
答えて
この場合、2つのクラスが必要です。貼り付けてください。 このクラスは、アプリケーション内で例外が発生したときに呼び出されます。
public class CrashHandler implements
java.lang.Thread.UncaughtExceptionHandler {
private final Context myContext;
private final String LINE_SEPARATOR = "\n";
public CrashHandler(Context context) {
myContext = context;
}
public void uncaughtException(Thread thread, Throwable exception) {
StringWriter stackTrace = new StringWriter();
exception.printStackTrace(new PrintWriter(stackTrace));
StringBuilder errorReport = new StringBuilder();
errorReport.append("************ CAUSE OF ERROR ************\n\n");
errorReport.append(stackTrace.toString());
errorReport.append("\n************ DEVICE INFORMATION ***********\n");
errorReport.append("Brand: ");
errorReport.append(Build.BRAND);
errorReport.append(LINE_SEPARATOR);
errorReport.append("Device: ");
errorReport.append(Build.DEVICE);
errorReport.append(LINE_SEPARATOR);
errorReport.append("Model: ");
errorReport.append(Build.MODEL);
errorReport.append(LINE_SEPARATOR);
errorReport.append("Id: ");
errorReport.append(Build.ID);
errorReport.append(LINE_SEPARATOR);
errorReport.append("Product: ");
errorReport.append(Build.PRODUCT);
errorReport.append(LINE_SEPARATOR);
errorReport.append("\n************ FIRMWARE ************\n");
errorReport.append("SDK: ");
errorReport.append(Build.VERSION.SDK);
errorReport.append(LINE_SEPARATOR);
errorReport.append("Release: ");
errorReport.append(Build.VERSION.RELEASE);
errorReport.append(LINE_SEPARATOR);
errorReport.append("Incremental: ");
errorReport.append(Build.VERSION.INCREMENTAL);
errorReport.append(LINE_SEPARATOR);
Intent intent = new Intent(myContext, ExceptionDisplay.class);
intent.putExtra("error", errorReport.toString());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
myContext.startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(10);
}
}
今すぐエラーが表示され活動を行います -
public class ExceptionDisplay extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.exception_display_layout);
TextView exception_text = (TextView) findViewById(R.id.exception_text);
Button btnBack = (Button) findViewById(R.id.btnBack);
exception_text.setText(getIntent().getExtras().getString("error"));
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intentData();
}
});
}
@Override
public void onBackPressed() {
intentData();
}
public void intentData() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(ExceptionDisplay.this, AppDataSourceSelection.class);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
}
}
今、あなたは、アプリケーションのクラスを拡張するクラスで、このクラスを呼び出すことができますどのようにすることができますコードとlogcatなければ
public class ErrorHandler extends Application {
@Override
public void onCreate() {
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(getApplicationContext()));
}}
@Champandroidありがとう(Y) –
ようこそ@Asad – Champandorid
try catchブロックを使用すると、アプリケーションがクラッシュするのを防ぐことができます。 catchブロックでは、予想される例外を取得し、あなたの助けにそれを記録します。 しかし、すべての例外がキャッチされるわけではないことを覚えておいてください。 いくつかの例外はExceptionから派生しないためです。 Throwableとエラー。
は、基本的には型の階層は次のとおりです。あなたがThrowableをキャッチした場合、本当にすべてをキャッチするようにObject
|
Throwable
/ \
Exception Error
のみのスロー可能オブジェクトと派生クラスは、スローすることができます。
RuntimeExceptionから派生したもの以外のException(またはException自体)から派生した例外は、例外をスローすると宣言する必要があります。
すべては、あなたがこれでキャッチされない例外を自分で処理することができます... Java例外階層は混乱のビットです、
に語りました。 以下のコードをアプリケーションクラスに使用します。
public class MyApplication extends Application {
private UncaughtExceptionHandler defaultUEH;
private Thread.UncaughtExceptionHandler _unCaughtExceptionHandler =
new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
// here I do logging of exception to a db
Log.d("MyApp", "Uncaught exception.");
// Do what you want.
// re-throw exception to O.S. if that is serious and need to be handled by o.s. Uncomment the next line that time.
//defaultUEH.uncaughtException(thread, ex);
}
};
public MyApplication() {
defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
// setup Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler);
}
}
- 1. ノードjsサーバーがクラッシュするのを防ぐ方法
- 2. 大きなMyISAMテーブルがクラッシュするのを防ぐ方法
- 3. ShellFolder.getFolderColumns(...)が多くクラッシュするのを防ぐ方法
- 4. ログがクラッシュするのを防ぐ
- 5. バネバッチがクラッシュするのを防ぐ
- 6. pythonスクリプトがクラッシュするのを防ぐ
- 7. アンドロイドアプリのデコードを防ぐには?
- 8. NodeJS:エラー時にアプリケーションがクラッシュするのを防ぐ
- 9. Selenium/Pythonプログラムがクラッシュするのを防ぐには?
- 10. メモリ不足時にノードがクラッシュするのを防ぐ
- 11. スレッドスターベートを防ぐ方法
- 12. セッションを防ぐ方法
- 13. セッションタイムアウトを防ぐ方法
- 14. HSTSを防ぐ方法は?
- 15. Ajaxキャッシングを防ぐ方法
- 16. enumコンストラクタを防ぐ方法
- 17. 他のアンドロイドアプリが自分のアクティビティにアクセスするのを防ぐには
- 18. ボタンクリックでアンドロイドアプリがクラッシュする
- 19. lxmlがデフォルトのdoctypeを追加するのを防ぐ方法
- 20. ユーザーがオブジェクトを破壊するのを防ぐ方法
- 21. チーム・シティがナゲット・アーティファクトをクリーンアップするのを防ぐ方法
- 22. Androidスタジオがbuild.gradleをフォーマットするのを防ぐ方法
- 23. nanocがコンテンツページをスキップするのを防ぐ方法
- 24. RubyMineエディタがファイルを修正するのを防ぐ方法
- 25. ブートストラップラベルがスペースを奪ってシフトするのを防ぐ方法
- 26. Symfony2がHTMLをエスケープするのを防ぐ方法
- 27. スワイプがクリックをトリガーするのを防ぐ方法は?
- 28. ブレンドが自動列を作成するのを防ぐ方法
- 29. AJAXがサイトをリフレッシュするのを防ぐ方法
- 30. EFがデータベースを作成するのを防ぐ方法は?
私たちは答えますか? –
私たちは皆、アプリケーションがクラッシュしないようにしています。ときには、それを防ぐことが可能な場合もあれば、そうでない場合もあります。しかし、コードなしで...不可能 – Ivan
@イワンありがとう!あなたのコメントのために。しかし、あなたは私が言っていることを得られなかった。 –