1. ホーム
  2. java

[解決済み] Androidの例外処理のベストプラクティス?

2023-08-03 08:28:18

質問

私のアプリがクラッシュした場合、アプリがクラッシュしたので閉じる必要があると Android に言われる前に、数秒間ハングします。そこで、私のアプリのすべての例外を一般でキャッチすることを考えていました。

try {
    // ... 
} catch(Exception e) { 
    // ...
} 

そして、新しい Activity を作成して、アプリケーションが即座にクラッシュしたことを説明します (また、ユーザーにエラーの詳細をメールで送信する機会を与えます)。これを達成するためのより良い方法があるのでしょうか、それともこれは推奨されないのでしょうか?

更新しました。 私は ART を有効にした Nexus 5 を使用していますが、アプリのクラッシュで経験していた遅延 (私が最初に話していた "hanging") に気づいていません。今はすべてがネイティブコードなので、クラッシュはすべてのクラッシュ情報を取得すると同時に即座に発生するのでしょう。Nexus 5 が速いだけかもしれませんが :) ともかく、これは将来の Android のリリースでは心配ないかもしれません (Android L では ART がデフォルトのランタイムになる予定であることを考えると)。

どのように解決するのですか?

ここでは リンクを参照してください。 .

ここでは、以下のようなクラスを作成します。 ExceptionHandler その implements java.lang.Thread.UncaughtExceptionHandler ..

このクラスでは、スタックトレースを作成したり、エラーレポートをアップロードするための準備など、命を守るための作業を行います。

さて、ここからが重要なところです。 つまり、その例外をどのように捕えるかです。 とはいえ、とても簡単です。各アクティビティで、オーバーライドのsuperメソッドの呼び出しのすぐ後に、次のコードをコピーしてください。 onCreate メソッドを呼び出した直後にコピーしてください。

Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));

あなたのActivityは次のようになります。

public class ForceClose extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));

        setContentView(R.layout.main);
    }
}

これが役に立つといいのですが...