La aplicación se bloquea (a veces) con señal fatal 11 (SIGSEGV), código 1

Estoy desarrollando una aplicación con el sdk HERE, y todo funcionó bien hasta ahora. Consigo errores como éste:
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x750057 in tid 10206 (FinalizerDaemon)
o este :
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x94789680 in tid 24605 (FinalizerDaemon)

Y hacen que mi aplicación se bloquee.

No siempre son los mismos errores, pero siempre vienen solos en mi Logcat, sin otra información.

En toda mi aplicación estoy usando objetos y servicios de HERE, e incluso imprimiendo el stacktrace no recibo más información sobre los errores.
Acabo de notar que estos errores aparecen bastante aleatoriamente, pero sólo cuando estoy utilizando estos objetos / servicios.

Yo uso un dispositivo real para probar mi aplicación, un Sony Xperia Z3 compacto, así que no creo que viene de aquí.

Estoy realmente perdido, así que si alguien tiene alguna idea incluso sobre cómo obtener más información sobre los errores, por favor ayuda

EDIT:

  05-09 23:04:10.148 6770-6782/? A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x4 in tid 6782 (FinalizerDaemon) 05-09 23:04:10.266 30179-30179/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 05-09 23:04:10.266 30179-30179/? I/DEBUG: UUID: 5569a1b9-c913-4101-99fa-5099e2cadd48 05-09 23:04:10.266 30179-30179/? I/DEBUG: Build fingerprint: 'Sony/D5803/D5803:5.1.1/23.4.A.1.264/2418263178:user/release-keys' 05-09 23:04:10.266 30179-30179/? I/DEBUG: Revision: '0' 05-09 23:04:10.266 30179-30179/? I/DEBUG: ABI: 'arm' 05-09 23:04:10.266 30179-30179/? I/DEBUG: pid: 6770, tid: 6782, name: FinalizerDaemon >>> com.david.metroz <<< 05-09 23:04:10.266 30179-30179/? I/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x4 05-09 23:04:10.294 30179-30179/? I/DEBUG: r0 98327400 r1 00000000 r2 00000002 r3 00000000 05-09 23:04:10.294 30179-30179/? I/DEBUG: r4 aec264c0 r5 b3df7acc r6 98327400 r7 73652348 05-09 23:04:10.294 30179-30179/? I/DEBUG: r8 6f9983a8 r9 b482a800 sl 12f1d820 fp b3df7abc 05-09 23:04:10.294 30179-30179/? I/DEBUG: ip b5303950 sp b3df7ab0 lr b510717f pc a0b7205c cpsr a00e0010 05-09 23:04:10.294 30179-30179/? I/DEBUG: #00 pc 000f405c /data/app/com.david.metroz-1/lib/arm/libMAPSJNI.so (Java_com_nokia_maps_GeoBoundingBoxImpl_destroyNative+76) 05-09 23:04:10.294 30179-30179/? I/DEBUG: #01 pc 001d7d4f /data/dalvik-cache/arm/data@app@com.david.metroz-1@base.apk@classes.dex 05-09 23:04:12.302 862-1274/? E/NativeCrashListener: Exception dealing with report android.system.ErrnoException: read failed: EAGAIN (Try again) at libcore.io.Posix.readBytes(Native Method) at libcore.io.Posix.read(Posix.java:165) at libcore.io.BlockGuardOs.read(BlockGuardOs.java:230) at android.system.Os.read(Os.java:350) at com.android.server.am.NativeCrashListener.consumeNativeCrashData(NativeCrashListener.java:240) at com.android.server.am.NativeCrashListener.run(NativeCrashListener.java:138) 

EDIT 2: Ahora estoy bastante seguro de que el accidente ocurre cuando estoy recuperando objetos AQUÍ desde la base de datos utilizando Gson.

El siguiente código funciona cuando todo se hace en el mismo tiempo de ejecución de la aplicación, pero cuando guardo una cadena en la base de datos, cierro la aplicación y luego la vuelvo a abrir, obtengo la Fatal signal mientras convertía la json string al objeto.

 // to insert I create a json string and then insert it in the database String mGbSortie = gson.toJson(geoboundinBox); //and then to retrieve the data : Type gbType = new TypeToken<GeoBoundingBox>(){}.getType(); geoBoudingBox = gson.fromJson(stringFromDb, listType) 

Realmente no sé por qué no funciona.

1) En primer lugar, determinar si se trata de un error en el android, las bibliotecas de terceros o su dispositivo, para que pueda saber qué manera de proceder.

Esta respuesta da una solución de cómo hacer esto:

Si ha escrito (o está usando) un complemento que a su vez utiliza código C / C ++ nativo a través del NDK, esto puede indicar un error en ese código nativo.

De lo contrario, se trata de un error en el firmware del dispositivo o emulador que está probando.

Si puedes reproducir esto en un emulador, en un dispositivo Nexus con la ROM original o en una variedad de dispositivos de diferentes fabricantes, probablemente sea un error en Android. En ese caso, cree un proyecto de ejemplo que pueda reproducir el error y publicarlo junto con el rastreo completo de la pila en http://b.android.com , el rastreador de problemas de OS de Android.

Si sólo encuentra esto en un dispositivo o en una ROM de terceros, es probable que se trate de un error más específico. Lo mejor es ponerse en contacto con el fabricante del dispositivo o el editor de ROM con sus síntomas.

Hay estas dos preguntas que discuten el error que usted está recibiendo en detalle:

Android Fatal señal 11 (SIGSEGV) en 0x636f7d89 (código = 1). ¿Cómo se puede localizar?

Señal fatal 11 (SIGSEGV) en 0x00000000 (código = 1) – PhoneGap

2) En términos de analizar sus valores de geobounds (como parece que es donde el problema puede estar), asegúrese de que está manejando su análisis entre Gson y Json correctamente, con los valores geobound correctos. Parece que el almacenamiento de los valores no está de acuerdo con la forma en que se están recuperando.

De Mykong :

ToJson () – Convertir objeto Java en JSON

 Gson gson = new Gson(); Staff obj = new Staff(); // 1. Java object to JSON, and save into a file gson.toJson(obj, new FileWriter("D:\\file.json")); // 2. Java object to JSON, and assign to a String String jsonInString = gson.toJson(obj); 

FromJson () – Convertir objeto JSON a Java

 Gson gson = new Gson(); // 1. JSON to Java object, read it from a file. Staff staff = gson.fromJson(new FileReader("D:\\file.json"), Staff.class); // 2. JSON to Java object, read it from a Json String. String jsonInString = "{'name' : 'mkyong'}"; Staff staff = gson.fromJson(jsonInString, Staff.class); // JSON to JsonElement, convert to String later. JsonElement json = gson.fromJson(new FileReader("D:\\file.json"), JsonElement.class); String result = gson.toJson(json); 

De esta respuesta :

 public class YourObject { private String appname; private String Version; private String UUID; private String WWXY; private String ABCD; private String YUDE; //getters/setters YourObject parsed = new Gson().fromJson(jsons, YourObject.class); String jsons = "{'appname':'application', 'Version':'0.1.0', 'UUID':'300V', 'WWXY':'310W', 'ABCD':'270B', 'YUDE':'280T'}"; YourObject parsed = new Gson().fromJson(jsons, YourObject.class); JsonObject object = new JsonParser().parse(jsons).getAsJsonObject(); object.get("appname"); // application object.get("Version"); // 0.1.0 

Estas preguntas de SO dan más detalles:
Cómo analizar el análisis de json Usando GSON en android
Analiza JSON con gson y GsonBuilder ()

3) Asegúrese de que está pasando los valores correctos para sus coordenadas de geobound. Esta pregunta Valor no cae dentro del rango esperado GeoboundingBox WinRT (aunque es C # da un buen ejemplo de cómo dividir los componentes de la información que está tratando de almacenar y recuperar.

La respuesta es sencilla.

 var nw = new BasicGeoposition(); nw.Latitude = Max(pos.Coordinate.Latitude, pos2.lat); nw.Longitude = Min(pos.Coordinate.Longitude, pos2.lng); var se = new BasicGeoposition(); se.Latitude = Min(pos.Coordinate.Latitude, pos2.lat); se.Longitude = Max(pos.Coordinate.Longitude, pos2.lng); 

Y aprende a analizar tu json con gson:

Utiliza Gson para trabajar con JSON en tus aplicaciones de Android

También hay este repo gihub para que usted pueda buscar más ideas.

¿Puedes pegar más información de adb logcat? En la actualidad no es suficiente información para que podamos ayudarte. Un segfault en el daemon del finalizador puede implicar la supresión doble de objetos nativos. Sin más información, podría estar en cualquier parte del sistema operativo o en el SDK.

Los marcos omitidos significa que la aplicación procesa muchos datos en el subproceso principal. Saltar 161 frames significa más de 3s de tiempo ocupado! Intenta utilizar AsyncTasks o subprocesos para optimizar tu aplicación.

Parece que está utilizando deserializador tipo GSON, que no construirá correctamente nuestros objetos nativos. Deserializar manualmente el lat, lng y llamar a GeoBoundingBox nuevo () no se bloqueará.

He resuelto el mismo problema siguiendo el código.

Añadir android:vmSafeMode="true" en la etiqueta de aplicación en el archivo de manifiesto .

Su etiqueta de aplicación debería tener el siguiente aspecto:

 <application android:name=".MyApplication" android:hardwareAccelerated="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:largeHeap="true" android:theme="@style/AppTheme" android:vmSafeMode="true"> // Other stuff </application> 

Espero que esto te ayudará.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.