0

アプリで ANR が発生しており、その理由を特定するのに非常に苦労しています。

アプリを起動してから何もしないか、スリープボタンを押すと、エラーが再現されます。スリープから 20 秒後にアプリがフリーズします。電話が再起動されると、ANR メッセージが表示されます。

私はこれにそれを絞り込みました:

Intent startGCM = new Intent(getBaseContext(), GCMService.class);
startGCM.setAction("CONNECT");
startService(startGCM);

これらの行は、メイン アクティビティの startup(onCreate) ルーチンの一部として実行されます。それらをコメントアウトすると、エラーはなくなり、電話は必要に応じてスリープ/スリープ解除でき、アプリは引き続き機能します。

これは非常に単純なサービス コールであることがわかります。そこで、対象のサービスを調べて、onStartCommand() 関数のコード全体を削除しました。return ステートメントを除いて、実行中のコードはまったくありません。しかし、それはエラーの発生を止めません。

電話で traces.txt ファイルを見つけましたが、私のコードについての言及はありません。これはメイン スレッド ダンプの最初の部分で、おそらくこれもおなじみです。

"main" prio=5 tid=1 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x4127f508 self=0x40f469a0
  | sysTid=12711 nice=0 sched=0/0 cgrp=apps handle=1074286384
  | schedstat=( 1176280531 686300303 3448 ) utm=93 stm=24 core=0
  #00  pc 0000da70  /system/lib/libc.so (epoll_wait+12)
  #01  pc 00014899  /system/lib/libutils.so (android::Looper::pollInner(int)+96)
  #02  pc 00014b01  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*,         void**)+104)
  #03  pc 000634f3  /system/lib/libandroid_runtime.so     (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
  #04  pc 0001deb0  /system/lib/libdvm.so (dvmPlatformInvoke+112)
  #05  pc 0004d103  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+394)
  #06  pc 000272e0  /system/lib/libdvm.so
  #07  pc 0002bbe8  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+180)

手がかりはありますか?何かが待っているというのは、私には意味がありません。何を待っているかを示す別のファイルはありますか?

4

0 に答える 0