私は Android を使用しており、Crittercism を使用してクラッシュを記録していますが、残念ながらすべてのクラッシュをキャッチすることはできません。見逃されたクラッシュの多くはOutOfMemoryException
s ですが、すべての OOM 例外が見逃されているわけではありません。引っかかるときと引っかからないときのパターンがわかりませんでした!! なぜこれが起こるのか、またはそれを回避する方法について誰かがたまたま知っていますか?
1 に答える
Out of Memory 例外が見つからない理由は、特定のシナリオと他のシナリオを処理する JVM の性質によるものです。
私は、JVM が敷居の下で親切にブラッシングするシナリオのリストを持っていません (つまり、アプリケーション プロセスを激しく強制終了しない) が、そのような場合、Crittercism は正常に機能し、Java Out of Memory 例外をキャプチャできます。JVM が激しくクラッシュする別のケースでは、Crittercism はキャプチャが困難になります (ただし、現時点で私が知る限り、これを処理するクラッシュ レポーターはありません)。
OOM 以外の他のシナリオについては、Crash Reporter (Crittercism だけでなく) がキャプチャするのが難しい他の 2 つのシナリオを次に示します。
App Not Responding は、OS がプロセスを強制終了し、何も実行または完了できない別のシナリオです。そのため、クラッシュ レポーターはこの瞬間を捉えることができません。
スタック オーバーフローは、アプリが破損した状態になり、OS がプロセスを強制終了するケースです。私はこのシナリオで 100% ではありませんが。
そうは言っても、Android では Crittercism は、JVM がクラッシュしたときにキャプチャするリモート NDK 例外追跡を提供する数少ないものの 1 つです (つまり、Dalvik ネイティブの例外/シグナル)。しかし、上で述べたように、JVM 管理メモリの優れた機能がないため、クラッシュはより揮発性が高く、OOM は見逃されます。
うまくいけば、それは役に立ちます!