Сбой процесса Android с использованием WebViews внутри ViewPager с включенным аппаратным ускорением

У меня есть действие с ViewPager, которое я использую для пролистывания фрагментов, содержащих «случайные» веб-страницы. Веб-контент не контролируется мной. Я использую FragmentStatePagerAdapter и последнюю библиотеку поддержки. Каждый макет фрагмента содержит веб-представление, которое загружает «случайную» страницу. Пользователь может листать вперед бесконечно.

Когда я включаю аппаратное ускорение, я получаю сбой сегмента (дамп ниже) после нескольких свайпов. При отключенном аппаратном ускорении для активности сбоя не происходит, но, конечно, прокрутка веб-просмотра и переходы пейджера просмотра очень прерывистые. Кроме того, я не могу воспроизводить встроенное видео на таких страницах, как YouTube.

Сбой не происходит на определенных страницах. Также различается количество пролистываний, необходимых для воспроизведения сбоя — иногда это происходит при первом пролистывании, иногда требуется несколько, но оно очень стабильно. Я проверил использование памяти во время работы приложения, и все в порядке (RAM и VRAM) — хорошо в том смысле, что я не думаю, что использую слишком много, и я не получаю никаких предупреждений о низком уровне памяти.

Я столкнулся с проблемой на всех устройствах 3.0+, которые я пробовал до сих пор:

  • тошиба регза работает 4.0.3
  • Motorola Xoon работает 3.2.1
  • телефон galaxy nexus с версией 4.0.4 (между прочим, с телефоном случается реже)

Это известная проблема? Любое обходное решение?

07-02 15:12:30.187: I/DEBUG(111): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

07-02 15:12:30.187: I/DEBUG(111): Build fingerprint: 'TOSHIBA/tostab05/tostab05:4.0.3/IML74K/05.3.0012:user/release-keys'

07-02 15:12:30.187: I/DEBUG(111): pid: 1538, tid: 1538  >>> xxx <<<

07-02 15:12:30.187: I/DEBUG(111): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000043e
07-02 15:12:30.187: I/DEBUG(111):  r0 0000000b  r1 02514ba0  r2 befbf378  r3 0000043e

07-02 15:12:30.187: I/DEBUG(111):  r4 020a43e8  r5 02070958  r6 00000000  r7 00000006

07-02 15:12:30.187: I/DEBUG(111):  r8 00000000  r9 020a2364  10 01d2d108  fp befbf6e4

07-02 15:12:30.187: I/DEBUG(111):  ip 409da55c  sp befbf330  lr 409c3487  pc 409c349a  cpsr 80000030

07-02 15:12:30.187: I/DEBUG(111):  d0  4488000044800000  d1  0000000044800000

07-02 15:12:30.187: I/DEBUG(111):  d2  4480000044801000  d3  00000000000000af

07-02 15:12:30.187: I/DEBUG(111):  d4  3f800000170000e0  d5  4480000044800000

07-02 15:12:30.187: I/DEBUG(111):  d6  4488000000000000  d7  4260000000000000

07-02 15:12:30.187: I/DEBUG(111):  d8  0000000000000000  d9  0000000300000038

07-02 15:12:30.187: I/DEBUG(111):  d10 00000000000002f0  d11 0000000000000000

07-02 15:12:30.187: I/DEBUG(111):  d12 0000000000000000  d13 0000000000000000

07-02 15:12:30.187: I/DEBUG(111):  d14 0000000000000000  d15 0000000000000000

07-02 15:12:30.187: I/DEBUG(111):  d16 0000000000000000  d17 3ff0000000000000

07-02 15:12:30.187: I/DEBUG(111):  d18 3fe0000000000000  d19 3fe000000112a880

07-02 15:12:30.187: I/DEBUG(111):  d20 3ff0000000000000  d21 8000000000000000

07-02 15:12:30.187: I/DEBUG(111):  d22 c000000000000000  d23 0000000000000000

07-02 15:12:30.187: I/DEBUG(111):  d24 0000000000000000  d25 3ff0000000000000

07-02 15:12:30.187: I/DEBUG(111):  d26 4010000000000000  d27 3ff0000000000000

07-02 15:12:30.187: I/DEBUG(111):  d28 0000000000000000  d29 3ff0000000000000

07-02 15:12:30.187: I/DEBUG(111):  d30 0000000000000000  d31 3ff0000000000000

07-02 15:12:30.187: I/DEBUG(111):  scr 80000013

07-02 15:12:30.335: I/DEBUG(111):          #00  pc 0000c49a  /system/lib/libhwui.so

07-02 15:12:30.343: I/DEBUG(111):          #01  pc 00010d3c  /system/lib/libhwui.so

07-02 15:12:30.343: I/DEBUG(111):          #02  pc 0000c682  /system/lib/libhwui.so

07-02 15:12:30.343: I/DEBUG(111):          #03  pc 00010d3c  /system/lib/libhwui.so

07-02 15:12:30.343: I/DEBUG(111):          #04  pc 0000c682  /system/lib/libhwui.so

07-02 15:12:30.343: I/DEBUG(111):          #05  pc 00010d3c  /system/lib/libhwui.so

07-02 15:12:30.343: I/DEBUG(111):          #06  pc 0000c682  /system/lib/libhwui.so

07-02 15:12:30.343: I/DEBUG(111):          #07  pc 00010d3c  /system/lib/libhwui.so

07-02 15:12:30.343: I/DEBUG(111):          #08  pc 0000c682  /system/lib/libhwui.so

07-02 15:12:30.343: I/DEBUG(111):          #09  pc 00010d3c  /system/lib/libhwui.so

07-02 15:12:30.343: I/DEBUG(111):          #10  pc 0000c682  /system/lib/libhwui.so

07-02 15:12:30.351: I/DEBUG(111):          #11  pc 00010d3c  /system/lib/libhwui.so

07-02 15:12:30.351: I/DEBUG(111):          #12  pc 00057874  /system/lib/libandroid_runtime.so
07-02 15:12:30.351: I/DEBUG(111):          #13  pc 0001ebf0  /system/lib/libdvm.so (dvmPlatformInvoke)
07-02 15:12:30.351: I/DEBUG(111):          #14  pc 00058eac  /system/lib/libdvm.so (_Z16dvmCallJNIMethodPKjP6JValuePK6MethodP6Thread)

07-02 15:12:30.351: I/DEBUG(111): code around pc:

07-02 15:12:30.351: I/DEBUG(111): 409c3478 f7fe6781 9010ffa3 f0044628 9f0df81f  .g......(F......

07-02 15:12:30.351: I/DEBUG(111): 409c3488 ab13aa12 920b3701 9711930e 900f3801  .....7.......8..

07-02 15:12:30.351: I/DEBUG(111): 409c3498 f853e2fe 98107b04 990d463a f7fe67a3  ..S..{..:F...g..

07-02 15:12:30.351: I/DEBUG(111): 409c34a8 2f23fedf 82f4f200 f017e8df 0037002e  ..#/..........7.

07-02 15:12:30.351: I/DEBUG(111): 409c34b8 0043003a 00810061 0095008c 00ad00a2  :.C.a...........

07-02 15:12:30.351: I/DEBUG(111): code around lr:

07-02 15:12:30.351: I/DEBUG(111): 409c3464 460db095 920c4604 0800f04f 4646930d  ...F.F..O.....FF

07-02 15:12:30.351: I/DEBUG(111): 409c3474 1080f8d0 f7fe6781 9010ffa3 f0044628  .....g......(F..

07-02 15:12:30.351: I/DEBUG(111): 409c3484 9f0df81f ab13aa12 920b3701 9711930e  .........7......

07-02 15:12:30.351: I/DEBUG(111): 409c3494 900f3801 f853e2fe 98107b04 990d463a  .8....S..{..:F..

07-02 15:12:30.351: I/DEBUG(111): 409c34a4 f7fe67a3 2f23fedf 82f4f200 f017e8df  .g....#/........

07-02 15:12:30.351: I/DEBUG(111): stack:

07-02 15:12:30.351: I/DEBUG(111):     befbf2f0  00000000  

07-02 15:12:30.351: I/DEBUG(111):     befbf2f4  befbf30c  [stack]

07-02 15:12:30.351: I/DEBUG(111):     befbf2f8  0237c55c  [heap]

07-02 15:12:30.351: I/DEBUG(111):     befbf2fc  befbf364  [stack]

07-02 15:12:30.351: I/DEBUG(111):     befbf300  409da430  /system/lib/libhwui.so

07-02 15:12:30.351: I/DEBUG(111):     befbf304  01d8c2d8  [heap]

07-02 15:12:30.351: I/DEBUG(111):     befbf308  409daa10  /system/lib/libhwui.so

07-02 15:12:30.351: I/DEBUG(111):     befbf30c  409c7d05  /system/lib/libhwui.so

07-02 15:12:30.351: I/DEBUG(111):     befbf310  00000000  

07-02 15:12:30.351: I/DEBUG(111):     befbf314  020a2364  [heap]

07-02 15:12:30.351: I/DEBUG(111):     befbf318  01d2d108  [heap]

07-02 15:12:30.351: I/DEBUG(111):     befbf31c  409c23f1  /system/lib/libhwui.so

07-02 15:12:30.351: I/DEBUG(111):     befbf320  020a43e8  [heap]

07-02 15:12:30.351: I/DEBUG(111):     befbf324  02070958  [heap]

07-02 15:12:30.351: I/DEBUG(111):     befbf328  df0027ad  

07-02 15:12:30.359: I/DEBUG(111):     befbf32c  00000000  

07-02 15:12:30.359: I/DEBUG(111): #00 befbf330  00000000  

07-02 15:12:30.359: I/DEBUG(111):     befbf334  3f800000  

07-02 15:12:30.359: I/DEBUG(111):     befbf338  00000000  

07-02 15:12:30.359: I/DEBUG(111):     befbf33c  44800000  /dev/ashmem/dalvik-heap (deleted)

07-02 15:12:30.359: I/DEBUG(111):     befbf340  00000000  

07-02 15:12:30.359: I/DEBUG(111):     befbf344  00000000  

07-02 15:12:30.359: I/DEBUG(111):     befbf348  3f800000  

07-02 15:12:30.359: I/DEBUG(111):     befbf34c  02370001  [heap]

07-02 15:12:30.359: I/DEBUG(111):     befbf350  00000000  

07-02 15:12:30.359: I/DEBUG(111):     befbf354  00000000  

07-02 15:12:30.359: I/DEBUG(111):     befbf358  befbf378  [stack]

07-02 15:12:30.359: I/DEBUG(111):     befbf35c  befbf378  [stack]

07-02 15:12:30.359: I/DEBUG(111):     befbf360  befbf6a0  [stack]

07-02 15:12:30.359: I/DEBUG(111):     befbf364  00000005  

07-02 15:12:30.359: I/DEBUG(111):     befbf368  befbf37c  [stack]

07-02 15:12:30.359: I/DEBUG(111):     befbf36c  0000000b  

07-02 15:12:30.359: I/DEBUG(111):     befbf370  01d8c2d8  [heap]

07-02 15:12:30.359: I/DEBUG(111):     befbf374  00000006  

07-02 15:12:30.359: I/DEBUG(111):     befbf378  44800000  /dev/ashmem/dalvik-heap (deleted)

07-02 15:12:30.359: I/DEBUG(111):     befbf37c  00000000  

07-02 15:12:30.359: I/DEBUG(111):     befbf380  44880000  /dev/ashmem/dalvik-heap (deleted)

07-02 15:12:30.359: I/DEBUG(111):     befbf384  020a43e8  [heap]

07-02 15:12:30.359: I/DEBUG(111):     befbf388  02070958  [heap]

07-02 15:12:30.359: I/DEBUG(111):     befbf38c  00000000  

07-02 15:12:30.359: I/DEBUG(111):     befbf390  409c7d05  /system/lib/libhwui.so

07-02 15:12:30.359: I/DEBUG(111):     befbf394  00000000  

07-02 15:12:30.359: I/DEBUG(111):     befbf398  020a2364  [heap]

07-02 15:12:30.359: I/DEBUG(111):     befbf39c  01d2d108  [heap]

07-02 15:12:30.359: I/DEBUG(111):     befbf3a0  befbf6e4  [stack]

07-02 15:12:30.359: I/DEBUG(111):     befbf3a4  409c7d41  /system/lib/libhwui.so

07-02 15:12:30.359: I/DEBUG(111): #01 befbf3a8  42600000  /dev/ashmem/dalvik-heap (deleted)

07-02 15:12:30.359: I/DEBUG(111):     befbf3ac  020a43e8  [heap]

07-02 15:12:30.359: I/DEBUG(111):     befbf3b0  00000040  

07-02 15:12:30.359: I/DEBUG(111):     befbf3b4  020a41a0  [heap]

07-02 15:12:30.359: I/DEBUG(111):     befbf3b8  02070958  [heap]

07-02 15:12:30.359: I/DEBUG(111):     befbf3bc  409c3685  /system/lib/libhwui.so

person Zack Foster    schedule 03.07.2012    source источник


Ответы (1)


Хорошо, я нашел обходной путь и «причину» сбоя. Я поставил «причину» в кавычки, потому что не думаю, что делаю что-то неправильно в своем исходном коде.

У меня был следующий код в моем фрагменте:

@Override
public void onCreate(Bundle savedInstanceState)
{
    ...
    setHasOptionsMenu(true);
    ...
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
    inflater.inflate(R.menu.options_menu, menu);
}

@Override
public void onPrepareOptionsMenu(Menu menu)
{
    ... // apply a menu strategy that enables/disables some items based on app state
}

По какой-то причине, если я удалю код инфляции, сбой больше не происходит. Обходной путь состоит в том, чтобы раздуть меню на уровне активности, а затем применить стратегию меню на уровне фрагмента. Не уверен, почему это происходит. Если это имеет значение, я в настоящее время не использую ABSherlock.

person Zack Foster    schedule 04.07.2012
comment
Я бы никогда не догадался, что проблема была в onCreateOptions. Я почти сдался и отключил ускорение H / W, когда нашел этот вопрос. Большое спасибо! - person Mandar Limaye; 03.08.2012