play license google developer java android crash signals

java - play - google developer license



Android Fatal Signal 11 (10)

En mi caso, el BluetoothSocket era nulo cuando intentaba establecer una conexión Bluetooth

En la aplicación que estoy desarrollando en Android, sigo recibiendo un error de Fatal Signal 11.

Creo que tiene algo que ver con la forma en que estoy accediendo a la memoria, pero no puedo descubrir qué es lo que la está causando.

¡Cualquier ayuda será muy apreciada!

Aquí está el LogCat:

05-02 23:47:17.618: D/dalvikvm(590): GC_FOR_ALLOC freed 68K, 4% free 6531K/6787K, paused 101ms 05-02 23:47:17.638: I/dalvikvm-heap(590): Grow heap (frag case) to 7.619MB for 1228816-byte allocation 05-02 23:47:17.738: D/dalvikvm(590): GC_CONCURRENT freed 1K, 4% free 7730K/8007K, paused 5ms+14ms 05-02 23:47:17.878: D/dalvikvm(590): GC_FOR_ALLOC freed <1K, 4% free 7730K/8007K, paused 37ms 05-02 23:47:17.888: I/dalvikvm-heap(590): Grow heap (frag case) to 8.790MB for 1228816-byte allocation 05-02 23:47:17.998: D/dalvikvm(590): GC_CONCURRENT freed <1K, 4% free 8930K/9223K, paused 4ms+4ms 05-02 23:47:17.998: A/libc(590): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)


En mi caso, fue una excepción de puntero nulo dentro de un evento onDraw que evita que el sorteo se complete en el lienzo. Creo que es un mensaje de error general cuando ocurre un problema de dibujo.


Experimenté el mismo error fatal al usar la clase Canvas.
Mi código se ve así. La siguiente pieza de código inicializa un arco y lo dibuja en el lienzo.

private RectF r1 = null; private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); public Arc(Context ctx) { super(ctx); mPaint.setColor(0xFFFF0000); r1 = new RectF(200, 200, 400, 400); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawArc(r1, 0, 90, true, mPaint); }

El problema ocurrió porque mi instancia de RectF no se inicializó, lo que dio como resultado NullPointerException y el error fatal.


Intenté llamar a un Lienzo no inicializado dentro de otra Clase, por lo que cuando intentaba obtener el alto o el ancho, se bloqueaba.


Lo mismo me sucedió durante el desarrollo del juego usando LibGDX framework para Android, y aquí está el por qué:

Tengo 2 pantallas: GameScreen y BattleScreen . GameScreen es donde muevo mi personaje en el mapa. Cuando tengo una colisión con un sprite enemigo, uso instantáneamente game.setScreen(new BattleScreen(this)) y cambio la pantalla actual a BattleScreen . Aquí es donde solía suceder Fatal Signal 11. Al principio pensé que tenía algo que ver con la carga de activos, porque mi instancia de administrador de activos era estática. Estaba probando varias formas de cargarlos pero nada funcionó. Resultó que estaba cambiando la pantalla en el lugar equivocado. Para mi GameScreen , tuve la instancia WorldController y WorldRenderer . Estaba usando worldController.update() y worldRenderer.render() dentro del GameScreen de render(float deltaTime) . Dentro de worldController.update() estaba buscando colisiones y cambiando de pantalla tan pronto como encontré una con el enemigo. No fue bueno para Android, tal vez porque ocurrió entre la actualización y el procesamiento, o tomó algo de tiempo, mientras la actualización aún se estaba ejecutando y generaba conflictos. No lo sé. Pero aquí es cómo lo arreglé:

  1. Agregué una bandera booleana (falsa por defecto) dentro de WorldController y cada vez que ocurría una colisión con un enemigo, lo estaba configurando en true
  2. En GameScreen ''s render() estaba revisando esta bandera; si fuera cierta, cambiaría la pantalla a BattleScreen ; de lo contrario, actualizaría y presentaría GameScreen

Ahora funciona perfectamente todo el tiempo, sin ERROR DE SEÑAL FATAL 11 en absoluto

Aquí está el GameScreen render() GameScreen :

@Override public void render(float deltaTime) { if(worldController.isCollisionWithEnemy()) { game.setScreen(game.battleScreen); } else { if(!paused) { worldController.update(deltaTime); } Gdx.gl.glClearColor(57.0f / 255.0f, 181.0f / 225.0f, 115.0f / 255.0f, 1.0f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); worldRenderer.render(); } }


Tuve el mismo problema con una instancia de android.media.MediaRecorder.

El código accedió a #getMaxAmplitude() después de que se #reset() y #release() en la instancia de MediaRecorder.


Tuve el mismo problema esta mañana y pude rastrearlo para guardar accidentalmente una imagen de 800 píxeles de ancho en la carpeta drawable-mdpi. Cuando me di cuenta de lo que sucedió, lo retoqué un segundo. Intenté comprimirlo para ver si estaba relacionado con el tamaño del archivo y no fue así. Luego traté de guardarlo de nuevo a 650 píxeles de ancho y funcionó de esa carpeta. Así que en algún lugar entre allí está el punto de ruptura para cada carpeta que pueda adivinar. Luego puse la imagen de 800 p de ancho en la carpeta hdpi deseada y la anchura de 480 p en el mdpi y lo arreglé.


Tuve el mismo problema y descubrí, después de una buena noche de sueño y un café en la mañana, que había sido lo suficientemente tonto como para respaldar el lienzo con un mapa de bits no inicializado. Parece que gran parte, si no todo, del código de dibujo lienzo es código nativo y el paso de objetos no inicializados no se detecta en todas partes.

SIGSEGV con una dirección nula (0x00000000) significa que su aplicación ha desreferenciado un puntero nulo, así que busque los lugares donde pasa punteros nulos (es decir, referencias vacías a instancias de objeto que no ha instanciado en primer lugar) al código respaldado por código nativo y no comprueba correctamente este error.


Tuve este problema cuando estaba haciendo una aplicación cocos2d-x en Android. el problema era que mi capa era un CCLayer:

CCLayer::init()

pero en el archivo de encabezado que tuve:

class HelloWorld : public cocos2d::CCLayerColor

Cambié CCLayerColor a CCLayer y mi aplicación funcionó


Yo también tuve este error al usar Libgdx para Android, y descubrí que este error es causado por Box2d que usa código nativo, es mejor mirar parte del código que usa Box2d y ver si hay punteros nulos.