Google Playで配布しないアプリにANRログ機能を実装する
前回、Google Playで配布しないアプリにクラッシュログ機能を実装するという記事を書きましたが、ここで使ったACRAというライブラリでは、ANRの場合のログは送信できません。
ANRとは、Application Not Respondingでアプリでの処理に時間がかかっているなどの理由から応答がない場合に発生する問題です。
○○アプリは応答していません。このアプリを終了しますか?
というダイアログが出るアレです。
これに挑戦するため、次のようなライブラリをSalomonBrysさんが作ってくれています。
ANR-WatchDog
https://github.com/SalomonBrys/ANR-WatchDog
使ってみました。とりあえず、設定も超簡単です。
- まず、
ACRA
Crashlytics
HokeyApp
のどれかのクラッシュログレポート機能を実装しておきます。
- 次に、次のリンクからanrwatchdog-1.1.1.jarをダウンロードします。
https://search.maven.org/remote_content?g=com.github.anrwatchdog&a=anrwatchdog&v=LATEST
- ダウンロードしたanrwatchdog-1.1.1.jarをプロジェクトのlibsディレクトリにコピペして入れます。
- ここではACRAを利用しているので、ACRAでの設定方法を書いておきます。
Google Playで配布しないアプリにクラッシュログ機能を実装するで作った
MyApplication.javaに、次の一行を足します。
public class MyApplication extends Application { @Override public void onCreate() { // The following line triggers the initialization of ACRA super.onCreate(); ACRA.init(this); new ANRWatchDog().start(); //これを足す } } }
これで設定は終わりです!
簡単ですね!
さて、ためしてみます。
ANRWatchdogは、UIスレッドが5秒とまっていたら発動する、という仕組みになっています。(5秒は変更が可能です)
下記のように、Activityに書いてみて、Activityを10秒とめてみましょう。
try{ Thread.sleep(10000); }catch (InterruptedException e){ Log.e(TAG, "えらー"); }
きました。
しかし、まだまだこのANRWatchdogが使えるかどうかわかりません・・・
しばらくこちらで試してみます。
後日談:使ってみて、逆にこのANRWatchdogのせいでクラッシュが起きる事態が起こったりしています…。 まだ未完成、ということなんですかね。今後に期待です!!