メインスレッドなどでブロックするコードがあると、ANR (Application Not Responding) が発生し、アプリケーションが強制終了されます。
端末の画面上で Not responding ダイアログが表示されたら [Force Close]
ボタンを押すと、以下のようなログが出るので、kill されたプロセス ID を確認します。
I ActivityManager: Killing process com.example.player (pid=854) at user's request
I Process : Sending signal. PID: 854 SIG: 9
この場合のプロセス ID は 854 です。
ANR の詳細は、/data/anr/traces.txt
に出力されています。
このテキストファイルを見てそのプロセス ID に関するコールスタックを確認すると、具体的にどのメソッドでブロックしてしまっているかがわかります。
$ adb pull /data/anr/traces.txt
$ gvim traces.txt
例えば、以下のように出力されていれば、VideoView.java
258 行目の MediaPlayer.prepareAsync
呼び出しでブロックしていることが分かります。
----- pid 854 at 2008-10-01 12:03:02 -----
Cmd line: com.example.player
DALVIK THREADS:
"main" prio=5 tid=3 NATIVE
| group="main" sCount=1 dsCount=0 s=N obj=0xb4c69e50 self=0x804d3f0
| sysTid=854 nice=0 sched=0/0 cgrp=unknown handle=-1224341824
at android.media.MediaPlayer.prepareAsync(Native Method)
at android.widget.VideoView.openVideo(VideoView.java:258)
at android.widget.VideoView.access$2000(VideoView.java:53)
at android.widget.VideoView$6.surfaceCreated(VideoView.java:506)
...