2015-07-28 2 views
1

У меня есть следующий ANR после ввода и выхода (несколько раз) экрана, который использует AsyncTask для загрузки некоторых данных.ANR в removeMessages и enqueueMessage

Полный ANR здесь: http://pastebin.com/g1MDv44Q

Несколько наблюдений:

  • Мое имя пакета не появляется в любом месте на штабеля
  • "Основной" нить SUSPENDED
  • Там много потоков в WAIT, это число увеличивается каждый раз и вводить/выходить на экран

Я также заметил, что две ПОДВЕСНЫЕ нити, кажется, в какой-то тупик или бесконечный цикл, один «удаление сообщения» и другие «enqueueing сообщения»:

"main" prio=5 tid=1 SUSPENDED 
    | group="main" sCount=1 dsCount=0 obj=0x415dce88 self=0x414fb898 
    | sysTid=9246 nice=-6 sched=0/0 cgrp=apps handle=1074143572 
    | state=S schedstat=(487768247094 88677560041 387007) utm=45537 stm=3239 core=3 
    at android.os.MessageQueue.removeMessages(MessageQueue.java:~472) 
    at android.os.Handler.removeCallbacks(Handler.java:479) 
    at android.view.View.removeCallbacks(View.java:11343) 
    at android.support.v7.widget.RecyclerView$ViewFlinger.stop(RecyclerView.java:3914) 
    at android.support.v7.widget.RecyclerView.stopScrollersInternal(RecyclerView.java:1641) 
    at android.support.v7.widget.RecyclerView.setScrollState(RecyclerView.java:1112) 
    at android.support.v7.widget.RecyclerView.cancelTouch(RecyclerView.java:2252) 
    at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:2237) 
    at android.view.View.dispatchTouchEvent(View.java:7837) 
    ... 

"Thread-28544" prio=4 tid=99 SUSPENDED 
    | group="main" sCount=1 dsCount=0 obj=0x451703d0 self=0x7bc9d658 
    | sysTid=13075 nice=10 sched=0/0 cgrp=apps handle=-2111467576 
    | state=S schedstat=(4705817143 4247615417 4666) utm=444 stm=26 core=3 
    at android.os.MessageQueue.enqueueMessage(MessageQueue.java:~359) 
    at android.os.Handler.enqueueMessage(Handler.java:626) 
    at android.os.Handler.sendMessageAtTime(Handler.java:595) 
    at android.os.Handler.sendMessageDelayed(Handler.java:566) 
    at android.os.Handler.sendEmptyMessageDelayed(Handler.java:530) 
    at android.os.Handler.sendEmptyMessage(Handler.java:515) 
    at com.android.org.chromium.base.SystemMessageHandler.setTimer(SystemMessageHandler.java:30) 
    at dalvik.system.NativeStart.run(Native Method) 

Является ли этот анализ правильно?

Если да, то почему это происходит и как я могу его исправить или предотвратить?

Если нет, это правильный анализ для этого ANR?

+0

какие-то шансы, что элемент каждого RecyclerView имеет в WebView? ... и у вас было много предметов? и загрузить URL-адрес в bindViewHolder? – Selvin

+0

нет, нет веб-просмотров! – thiagolr

+0

На самом деле это AdView от AdMob, он, вероятно, использует какой-то WebView на нем! – thiagolr

ответ

0

Это, по-видимому, проблема в вехе M33 хрома (M33 влияет на Android 4.4.3 и 4.4.4), где каждое событие таймера удаляет сообщения обработчика и перенаправляет новое сообщение таймера очень быстро. Вопрос был fixed после M33, но, к сожалению, KitKat не поддерживает обновление Chromium из Google Play Store, так что исправление не может быть применено без обновления к Lollipop (5.0) или более поздней версии. Подозреваемая линия:

at com.android.org.chromium.base.SystemMessageHandler.setTimer(SystemMessageHandler.java:30)