La aplicación se bloquea al azar con la señal Fatal 7 (SIGBUS), código 2 o la señal Fatal 11 (SIGSEGV), código 1
Estoy creando una aplicación que se supone que muestra algunas imágenes en unFragment
, la mayoría de ellos descargados de internet.
Estoy usandoDeslizamiento para manejar esa carga de imágenes para mí en mis CardViews yFresco en mi control deslizante de imagen (Yesta pregunta sobre SO explica por qué estoy usando dos libs de imágenes).
La parte de Fresco de la biblioteca se basa principalmente eneste tenedor delAndroidImageSlider
.
Importante: Las imágenes que estoy tratando de cargar pueden serPNG
oSVG
.
Más información: Estoy usando unMoto Maxx (versión internacional de laDroid Turbo) con Android 5.0.2. También sucedió en un Samsung Galaxy S4 con Android 4.4.2 (mod de cianógeno), pero ocurre con mucha menos frecuencia.
PD.: estoyNO usando NDK.
El problemaA veces, mi aplicación simplemente falla, de la nada, e incluso sin ninguna interacción del usuario. Y cuando lo hace, recibo el siguiente mensaje de error en el logcat:
Fatal signal 7 (SIGBUS), code 2, fault addr 0x9a74c060 in tid 21894
Completa pila:
04-07 07:59:08.110 21894 21894 F libc : Fatal signal 7 (SIGBUS), code 2, fault addr 0x9a74c060 in tid 21894 (asus.saitestore)
04-07 07:59:08.161 21946 21946 E Diag_Lib: Diag_LSM_Init: Failed to open handle to diag driver, error = 2
04-07 07:59:08.263 333 333 I DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
04-07 07:59:08.263 333 333 I DEBUG : Build fingerprint: 'motorola/quark_retbr/quark_umts:5.0.2/LXG22.33-12.16/16:user/release-keys'
04-07 07:59:08.263 333 333 I DEBUG : Revision: 'p4a0'
04-07 07:59:08.263 333 333 I DEBUG : ABI: 'arm'
04-07 07:59:08.263 333 333 I DEBUG : pid: 21894, tid: 21894, name: asus.saitestore >>> org.unasus.saitestore <<<
04-07 07:59:08.264 333 333 I DEBUG : signal 7 (SIGBUS), code 2 (BUS_ADRERR), fault addr 0x9a74c060
04-07 07:59:08.446 333 333 I DEBUG : r0 00000000 r1 bead50cc r2 00000000 r3 9dae4000
04-07 07:59:08.446 333 333 I DEBUG : r4 9dae4000 r5 9a74c060 r6 bead50d4 r7 00000001
04-07 07:59:08.446 333 333 I DEBUG : r8 00063054 r9 00000000 sl 000000fe fp 00000000
04-07 07:59:08.446 333 333 I DEBUG : ip 00000000 sp bead5094 lr b5952d63 pc b5a38426 cpsr 800b0030
04-07 07:59:08.447 333 333 I DEBUG :
04-07 07:59:08.447 333 333 I DEBUG : backtrace:
04-07 07:59:08.447 333 333 I DEBUG : #00 pc 001b2426 /system/lib/libskia.so (S32_opaque_D32_nofilter_DX_neon(SkBitmapProcState const&, unsigned int const*, int, unsigned int*)+141)
04-07 07:59:08.447 333 333 I DEBUG : #01 pc 000ccd61 /system/lib/libskia.so (SkBitmapProcShader::BitmapProcShaderContext::shadeSpan(int, int, unsigned int*, int)+86)
04-07 07:59:08.447 333 333 I DEBUG : #02 pc 000d6cff /system/lib/libskia.so (SkARGB32_Shader_Blitter::blitV(int, int, int, unsigned char)+528)
04-07 07:59:08.447 333 333 I DEBUG : #03 pc 001076c1 /system/lib/libskia.so
04-07 07:59:08.447 333 333 I DEBUG : #04 pc 0010782d /system/lib/libskia.so
04-07 07:59:08.447 333 333 I DEBUG : #05 pc 001078b9 /system/lib/libskia.so
04-07 07:59:08.447 333 333 I DEBUG : #06 pc 00107cf3 /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRegion const*, SkBlitter*)+178)
04-07 07:59:08.447 333 333 I DEBUG : #07 pc 0010804b /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRasterClip const&, SkBlitter*)+14)
04-07 07:59:08.447 333 333 I DEBUG : #08 pc 000e2031 /system/lib/libskia.so (SkDraw::drawRect(SkRect const&, SkPaint const&) const+252)
04-07 07:59:08.447 333 333 I DEBUG : #09 pc 000e3513 /system/lib/libskia.so (SkDraw::drawBitmap(SkBitmap const&, SkMatrix const&, SkPaint const&) const+276)
04-07 07:59:08.447 333 333 I DEBUG : #10 pc 000db7c5 /system/lib/libskia.so
04-07 07:59:08.447 333 333 I DEBUG : #11 pc 000db8ad /system/lib/libskia.so (SkCanvas::drawBitmap(SkBitmap const&, float, float, SkPaint const*)+116)
04-07 07:59:08.447 333 333 I DEBUG : #12 pc 000f97bb /system/lib/libskia.so (SkPicturePlayback::draw(SkCanvas&, SkDrawPictureCallback*)+1186)
04-07 07:59:08.447 333 333 I DEBUG : #13 pc 000b54c7 /system/framework/arm/boot.oat
04-07 07:59:09.190 333 333 I DEBUG : Tombstone written to: /data/tombstones/tombstone_08
04-07 07:59:09.205 806 828 I BootReceiver: Copying /data/tombstones/tombstone_08 to DropBox (SYSTEM_TOMBSTONE)
Una vez, también me dio un mensaje de error diferente:
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x9abe300c in tid 30052
Y la pila completa:
04-04 15:41:34.059: A/libc(30052): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x9abe300c in tid 30052 (asus.saitestore)
04-04 15:41:34.161: I/DEBUG(28994): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
04-04 15:41:34.161: I/DEBUG(28994): Build fingerprint: 'motorola/quark_retbr/quark_umts:5.0.2/LXG22.33-12.16/16:user/release-keys'
04-04 15:41:34.161: I/DEBUG(28994): Revision: 'p4a0'
04-04 15:41:34.161: I/DEBUG(28994): ABI: 'arm'
04-04 15:41:34.161: I/DEBUG(28994): pid: 30052, tid: 30052, name: asus.saitestore >>> org.unasus.saitestore <<<
04-04 15:41:34.161: I/DEBUG(28994): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x9abe300c
04-04 15:41:34.177: I/DEBUG(28994): r0 00000000 r1 bede70a4 r2 00000000 r3 9ce89000
04-04 15:41:34.178: I/DEBUG(28994): r4 9ce89000 r5 9abe300c r6 bede70ac r7 00000001
04-04 15:41:34.178: I/DEBUG(28994): r8 00000000 r9 00000000 sl 000000fe fp 00000000
04-04 15:41:34.178: I/DEBUG(28994): ip 00000000 sp bede706c lr b5992d63 pc b5a78426 cpsr 800b0030
04-04 15:41:34.178: I/DEBUG(28994): backtrace:
04-04 15:41:34.178: I/DEBUG(28994): #00 pc 001b2426 /system/lib/libskia.so (S32_opaque_D32_nofilter_DX_neon(SkBitmapProcState const&, unsigned int const*, int, unsigned int*)+141)
04-04 15:41:34.178: I/DEBUG(28994): #01 pc 000ccd61 /system/lib/libskia.so (SkBitmapProcShader::BitmapProcShaderContext::shadeSpan(int, int, unsigned int*, int)+86)
04-04 15:41:34.178: I/DEBUG(28994): #02 pc 000d6cff /system/lib/libskia.so (SkARGB32_Shader_Blitter::blitV(int, int, int, unsigned char)+528)
04-04 15:41:34.178: I/DEBUG(28994): #03 pc 0010721d /system/lib/libskia.so
04-04 15:41:34.178: I/DEBUG(28994): #04 pc 00107669 /system/lib/libskia.so
04-04 15:41:34.178: I/DEBUG(28994): #05 pc 0010782d /system/lib/libskia.so
04-04 15:41:34.178: I/DEBUG(28994): #06 pc 001078b9 /system/lib/libskia.so
04-04 15:41:34.178: I/DEBUG(28994): #07 pc 00107cf3 /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRegion const*, SkBlitter*)+178)
04-04 15:41:34.179: I/DEBUG(28994): #08 pc 0010804b /system/lib/libskia.so (SkScan::AntiFillRect(SkRect const&, SkRasterClip const&, SkBlitter*)+14)
04-04 15:41:34.179: I/DEBUG(28994): #09 pc 000e2031 /system/lib/libskia.so (SkDraw::drawRect(SkRect const&, SkPaint const&) const+252)
04-04 15:41:34.179: I/DEBUG(28994): #10 pc 000e3513 /system/lib/libskia.so (SkDraw::drawBitmap(SkBitmap const&, SkMatrix const&, SkPaint const&) const+276)
04-04 15:41:34.179: I/DEBUG(28994): #11 pc 000db7c5 /system/lib/libskia.so
04-04 15:41:34.179: I/DEBUG(28994): #12 pc 000db8ad /system/lib/libskia.so (SkCanvas::drawBitmap(SkBitmap const&, float, float, SkPaint const*)+116)
04-04 15:41:34.179: I/DEBUG(28994): #13 pc 000f97bb /system/lib/libskia.so (SkPicturePlayback::draw(SkCanvas&, SkDrawPictureCallback*)+1186)
04-04 15:41:34.179: I/DEBUG(28994): #14 pc 000b54c7 /system/framework/arm/boot.oat
04-04 15:41:34.820: I/DEBUG(28994): Tombstone written to: /data/tombstones/tombstone_07
04-04 15:41:34.821: I/BootReceiver(1989): Copying /data/tombstones/tombstone_07 to DropBox (SYSTEM_TOMBSTONE)
EDITAR: También sucedió en un Samsung Galaxy S4,la lápida se puede encontrar aquí.
Cómo estoy cargando las imágenesDentro de miCardAdapter
, Estoy cargando las imágenes así (la parte SVG fue tomada deaquí):
if (mod.getImg_type() == ImageTypes.SVG) {
GenericRequestBuilder<Uri, InputStream, SVG, PictureDrawable> requestBuilder;
SVGDecoder decoder = new SVGDecoder(PreserveAspectRatio.STRETCH);
requestBuilder = Glide.with(mContext)
.using(Glide.buildStreamModelLoader(Uri.class, mContext), InputStream.class)
.from(Uri.class)
.as(SVG.class)
.transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
.sourceEncoder(new StreamEncoder())
.cacheDecoder(new FileToStreamDecoder<>(decoder))
.decoder(decoder)
.placeholder(R.drawable.modulo)
.error(R.drawable.banner_error)
.animate(android.R.anim.fade_in)
.listener(new SvgSoftwareLayerSetter<Uri>());
requestBuilder
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.load(Uri.parse(mod.getUrl_icon()))
.into(cardHolder.iv_card);
}
else {
Glide.with(mContext)
.load(mod.getUrl_icon())
.placeholder(R.drawable.modulo)
.error(R.drawable.banner_error)
.centerCrop()
.crossFade()
.into(cardHolder.iv_card);
}
Y elXML
el archivo se ve así:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view"
android:layout_width="@dimen/card_w"
android:layout_height="@dimen/card_h"
android:layout_margin="5dp"
android:stateListAnimator="@anim/raise"
card_view:cardCornerRadius="0dp"
android:foreground="?android:attr/selectableItemBackground">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/rl_card">
<ImageView
android:layout_width="@dimen/card_image_w"
android:layout_height="@dimen/card_image_h"
android:layout_centerHorizontal="true"
android:scaleType="fitXY"
android:id="@+id/iv_card"
android:src="@drawable/modulo"
android:layout_margin="@dimen/spacing_medium" />
<TextView
android:id="@+id/tv_card"
android:layout_width="@dimen/card_text_w"
android:layout_height="@dimen/card_text_h"
android:maxHeight="@dimen/card_text_h"
android:maxWidth="@dimen/card_text_w"
android:layout_below="@+id/iv_card"
android:layout_centerHorizontal="true"
android:ellipsize="end"
android:maxLines="1"
android:singleLine="true"
android:text="Bacon ipsum dolor amet duis short ribs nostrud esse tempor."
android:textSize="12sp"
android:gravity="center_horizontal"
android:layout_marginLeft="@dimen/spacing_medium"
android:layout_marginRight="@dimen/spacing_medium" />
<View
android:id="@+id/card_check"
android:layout_width="match_parent"
android:layout_height="@dimen/card_check_h"
android:maxHeight="@dimen/card_check_h"
android:layout_below="@+id/tv_card"
android:background="@color/primary_light"
android:layout_alignParentBottom="true" />
</RelativeLayout>
</android.support.v7.widget.CardView>
¿Qué he encontrado hasta ahora?He encontrado algunas preguntas aquí sobre SO, pero ninguna de ellas realmente ayudó con mi problema. Y es un poco difícil reproducirlo. A veces, la aplicación no se bloquea en absoluto, incluso después de 30 minutos en la pantalla defectuosa. Por otro lado, sucedió justo después de que se mostraran las imágenes.
Algunas preguntas que he encontrado:
¿Qué significa exactamente “Señal fatal 7 (SIGBUS) en 0x5937abd0 (código = 2)” en la plataforma Android?Señal fatal 7 (SIGBUS) a 0x00000000 (código = 2)Android Fatal Signal 7 (SIGBUS)SEÑAL FATAL 11 (Sigsegv) a 0x00000000 (código = 1)?No se puede detectar la excepción Java (Android) con try-catch, createBitmapY muchos otros...
Y aquí hay una captura de pantalla de la aplicación, tomada del informe de error generado por mi teléfono:
He visto en algunos lugares que este problema podría estar relacionado con poca memoria. Pero creo que es poco probable, ya que mi teléfono tiene 3GB o RAM, y estoy cargando menos imágenes en comparación con la aplicación de la galería nativa (que no se bloquea en mi teléfono).
Por otro lado, el hilo en el rastreador de problemas de skia sugiere que está relacionado con la biblioteca SVG.
Actualizar: He encontradoeste enlace en el rastreador de problemas de Android, yéste en el rastreador de problemas de skia, que probablemente esté relacionado con el problema.
Otra actualización: Eliminé el control deslizante y la aplicación dejó de fallar. Supongo que el problema está ahí.
Otra actualización: He cambiado el control deslizante para cargar soloPNG
o soloSVG
en un momento dadoLa aplicación solo se bloqueó al cargar elSVG
imágenes. Entonces quizás el problema está enSVG lib.
La carga de SVG desde un archivo también se bloquea.