Viewpager滚动导致SIGSEGV

时间:2016-07-15 06:50:33

标签: android android-6.0-marshmallow

我正在我的应用程序上开发一个“类似Gallery”的功能,我使用Viewpager来执行此操作。几乎所有手机都可以正常使用。

但是,当我在XiaoMi5上运行时,它会导致SIGSEGV。下面是日志信息。

  07-15 14:36:59.451 5709-6037/com.abc E/OpenGLRenderer:  resultIndex is -1, the polygon must be invalid!
  07-15 14:36:59.452 5709-6037/com.abc A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x592 in tid 6037 (hwuiTask1)
  07-15 14:36:59.528 730-730/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
  07-15 14:36:59.528 730-730/? A/DEBUG: Build fingerprint:  'Xiaomi/gemini/gemini:6.0/MRA58K/V7.3.4.0.MAACNDD:user/release-keys'
  07-15 14:36:59.529 730-730/? A/DEBUG: Revision: '0'
  07-15 14:36:59.529 730-730/? A/DEBUG: ABI: 'arm'
  07-15 14:36:59.530 730-730/? A/DEBUG: pid: 5709, tid: 6037, name: hwuiTask1  >>> com.abc <<<
  07-15 14:36:59.530 730-730/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x592
  07-15 14:36:59.573 730-730/? A/DEBUG:     r0 000000b2  r1 000000b3  r2 00000002  r3 000000b2
  07-15 14:36:59.573 730-730/? A/DEBUG:     r4 000000b3  r5 000000b1  r6 00000016  r7 d818ff38
  07-15 14:36:59.573 730-730/? A/DEBUG:     r8 d8190270  r9 000000af  sl d818f5f8  fp 00000023
  07-15 14:36:59.573 730-730/? A/DEBUG:     ip 00000589  sp 00000000  lr f5e9a55b  pc f5e9a3c2  cpsr 000f0030
 07-15 14:36:59.580 730-730/? A/DEBUG: backtrace:
 07-15 14:36:59.581 730-730/? A/DEBUG:     #00 pc 000563c2  /system/lib/libhwui.so
 07-15 14:36:59.581 730-730/? A/DEBUG:     #01 pc 00057441  /system/lib/libhwui.so
 07-15 14:36:59.581 730-730/? A/DEBUG:     #02 pc 00051ff1  /system/lib/libhwui.so
 07-15 14:36:59.581 730-730/? A/DEBUG:     #03 pc 00058481  /system/lib/libhwui.so
 07-15 14:36:59.581 730-730/? A/DEBUG:     #04 pc 0001f1f1  /system/lib/libhwui.so
 07-15 14:36:59.581 730-730/? A/DEBUG:     #05 pc 00010115  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+112)
 07-15 14:36:59.581 730-730/? A/DEBUG:     #06 pc 0005e22b  /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+70)
 07-15 14:36:59.581 730-730/? A/DEBUG:     #07 pc 0003f9e3  /system/lib/libc.so (__pthread_start(void*)+30)
 07-15 14:36:59.581 730-730/? A/DEBUG:     #08 pc 00019fe5  /system/lib/libc.so (__start_thread+6)
 07-15 14:37:00.449 730-730/? A/DEBUG: Tombstone written to: /data/tombstones/tombstone_07
 07-15 14:37:00.449 730-730/? E/DEBUG: AM write failed: Broken pipe
 07-15 14:37:00.472 3290-4249/? E/octvm_klo: read: Unexpected EOF!

任何人都可以帮助我,非常感谢。

1 个答案:

答案 0 :(得分:0)

致命信号11( SIGSEGV )这可能是由于本机级别的某些内存管理问题而出现的。将图层类型设置为 View.LAYER_TYPE_SOFTWARE 将禁用硬件加速,您可以找到有关此here的更多信息。禁用可以降低性能但是根据您加载到viewpager中的内容,它可能会也可能不会显示。

然而,禁用硬件加速的副作用是某些内存管理不是在本机级别完成,因此在那里出错的可能性更小。

但这样做并不能解决它只是避免它的问题。问题可能是 OOM 情况,因此我建议您使用内存分析器( Android Studio&gt; Android Monitor标签&gt;监视器&gt;内存)等工具分析您的内存使用情况。其他可能的原因可能是,如果您使用一些特殊的本机库,它们可以使用本机疯狂的东西。