Error de depuración en el emulador de Android: pantalla negra
Encontré un problema mientras intentaba depurar el siguiente código:
package course.examples.theanswer; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class TheAnswer extends Activity { public static final int[] answers = { 42, -10, 0, 100, 1000 }; public static final int answer = 42; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.answer_layout); TextView answerView = (TextView) findViewById(R.id.answer_view); int val = findAnswer(); String output = (val == answer) ? "42" : "We may never know"; answerView.setText("The answer to life, the universe and everything is:\n\n" + output); } private int findAnswer() { for (int val : answers) { if (val == answer) return val; } return -1; }
}
- Teniendo un problema al cargar el emulador de Android en Eclipse. Todo lo que dice es ANDROID_. ¿Alguna sugerencia?
- ¿Cómo puedo configurar el factor de escala para el emulador de Android
- La instancia del emulador del pan de jengibre es mucho más lenta que Froyo y abajo. ¿Por qué?
- Cómo sacudir el dispositivo virtual creado por Genymotion (Android Emulator)
- Aumento de la memoria de YouWave
He insertado un punto de ruptura en la línea "int val = findAnswer();"
, Es decir, antes de que la aplicación ejecute el mensaje ("La respuesta a la vida …"). Así, el emulador muestra la pantalla blanca con el título, es correcto, pero cuando pasa unos 10 segundos la pantalla se vuelve negra … y el logCat muestra el siguiente mensaje:
01-23 05:57:29.995: I/System.out(2009): waiting for debugger to settle... 01-23 05:57:30.205: I/System.out(2009): debugger has settled (1309) 01-23 05:57:30.845: D/dalvikvm(2009): threadid=1: still suspended after undo (sc=1 dc=1) 01-23 05:57:37.825: W/ActivityManager(1254): Launch timeout has expired, giving up wake lock! 01-23 05:57:37.835: E/WindowManager(1254): Starting window AppWindowToken{b33e2a00 token=Token{b3344b58 ActivityRecord{b317b130 u0 course.examples.theanswer/.TheAnswer t10}}} timed out
El mensaje final es cuando la pantalla se vuelve negra. No puedo publicar imágenes pero el emulador solo muestra: hora, red y batería. Además, si presioné el botón "Resumen", la aplicación se fija bien. Sin embargo, creo que no es la idea. Debería detenerse con la pantalla blanca para mantener la depuración … (creo, pero no estoy seguro). ¿Es normal?
¿Puede alguien ayudarme por favor?
Gracias
- Cómo desinstalar mi aplicación del emulador de Android en un Mac 10.7.4
- Tamaño de fuente pequeño en el emulador de Android
- Cómo crear un emulador API-15 con Google Play Services (línea de comandos)
- Android: Layout.addView () no funciona
- El apagado del emulador de Android toma FOREVER
- Instagram en el emulador de Android
- ¿Por qué el emulador de genymotion es mucho más rápido que el emulador de Android?
- Hacer que el emulador de Android funcione más rápido
La explicación es simple, pero no sé cómo cambiar este comportamiento:
Cuando se ejecuta una aplicación de Android, el subproceso principal debe procesar todos los mensajes entrantes (desde la GUI y otros mensajes internos). Está estrictamente prohibido utilizar el hilo principal para operaciones duraderas porque en ese momento el hilo está bloqueado y no puede procesar mensajes.
Al iniciar una aplicación, Android ofrece 10 segundos para que la aplicación se inicie. Después espera que la aplicación esté lista para procesar mensajes.
Ahora a su problema:
Ha establecido un punto de ruptura en onCreate (..) un método que se llama por el hilo principal – un hilo que no debe bloquearse. Establecer un punto de ruptura no es otra cosa que interrumpir / bloquear el hilo hasta que presione resume. Por lo tanto, después de 10 segundos, el sistema Android (que no se ve afectado por el depurador) espera que la aplicación termine con el inicio. Pero el hilo principal sigue atrapado por el punto de quiebre! Por lo tanto Android piensa que la aplicación falló al arrancar y detiene a parte responsable de la GUI.
La única solución que veo sería desactivar este "tiempo de lanzamiento" – sin embargo no tengo ni idea de si o cómo esto es posible.
- No se puede escribir en el almacenamiento externo a menos que se reinicie la aplicación después de conceder permiso.
- ¿Cómo compartir recursos entre la prueba de unidad y la prueba de instrumentación en android?