Android アプリのクラッシュ エラー レコードを見つけるには adb を覚えておいてください
まず結論からお話しますと、メモリが不足している場合にこのような問題が発生するため、Xiaomi
携帯電話には
この異常をさまざまな方法でシミュレートできるそのような設定があります。
logcat のログです。
操作が多い場合は、それが最適です。それでは、設定してください。操作が短時間で再現できる場合は、調整する必要はありません。256k で十分です。次に、携帯電話をに接続します
。コンピューターに
接続し、コマンド ライン ツールを開いて logcat ログをクリアします。
adb logcat -c
次にログを確認します
#需要打印时间和级别是Error的信息
adb logcat -v time *:E
これは cmd でログを出力するためのものです。時間がない場合は、ログをダウンロードしてください。以前のログはクリーンアップされていませんか? もう一度コマンドを実行してみましょう
adb logcat -v time >C:/Users/EDY/Desktop/work/logcat.txt
このとき、logcat ログはローカルに送信されますが、操作が終了したら adb ウィンドウを閉じることができることに注意してください。そうしないと、ログは常に Windows のローカル ファイルに書き込まれ、ログは書き込まれません。
「FATAL」キーワードで
エラーメッセージを検索できますが、エラーの本当の原因については、開発者に確認してもらう必要があります。
ANR が発生した場合は
、トレース ログを確認する必要があります。Xiaomi
携帯電話を例に挙げると、
2 つの問題が発生する可能性があります。1
つは、誰もが adb pull /data/anr/traces.txt と言っているのに
、自分でプルすると、
携帯電話が異なるため、エラーが報告されます。製造元のファイル名は異なる可能性があります
が、どのファイルが必要かわからないため、最初にファイルを取得しようとしましたが、2 番目の問題であるアクセス許可が不十分であることがわかりました。それ
adb bugreport
ファイルをどこに配置し
て解凍するかを教えてくれます。解凍されたファイルには、anr ディレクトリ内のすべてのものが含まれています。
どのファイルが必要であるかを判断する方法 ログの時刻を調べて、どのファイルが操作の時刻に近いかを確認できます ファイルを
開いた後、それがパッケージによって報告されたエラーかどうかを確認します
エラーの場所を特定する方法メッセージは
次のコンテンツです。 まず
、アプリのパッケージ名と ANR が発生した時刻に基づいて、ANR ログの場所を特定できます。通常はトレース コンテンツの先頭にあります。
その場合、ANR はメイン スレッドの例外である必要があり、「メイン」スレッド部分を見つけて、メイン スレッド関連のステータスを確認できます。
メインスレッドがスリープしていることがよくわかりますが、通常、マルチスレッド開発ではブロック状態による ANR が発生しやすくなります。
次に、次のスレッド呼び出しスタック情報を引き続き見つけることができます。
この領域についてはさらに詳しくなりました。通常の例外を見るのと同じように、MainActivity の 28 行目で ANR が発生したことが明確にわかります。理由は Thread.sleep() です。この時点で、上記の独自のコード レベルに戻ります。そして結果は非常に明らかです。
もちろん、実際の開発における ANR は通常それほど単純ではなく、分析がそれほど簡単ではないものもあるため、誰もがこの記事から学び、実際の開発とさらなる分析を組み合わせ、最適化して自身の能力を向上させる必要があります。
スレッド状態
上記のスレッド状態については、Java スレッド状態と比較して、Linux では多くの状態が改良されているため、現在の状態の分析が容易になります。
Java のスレッドは、オペレーティング システム カーネルのスレッドと同等ではありません。これらの間にはマッピング関係があり、Android の場合、Java のスレッドとカーネルのスレッドの間には 1 対 1 の関係があります。