Android: El proceso ha muerto – bajos recursos?
Tengo un pequeño problema con una simple solicitud HTTP GET que he escrito y que solicitará una URL cada X minutos. Lo tenía una o dos veces al día que el proceso se detuvo en medio de la solicitud GET.
He aquí un ejemplo del registro de depuración:
- Android 4.0.4 WebView MediaPlayer Error (1, -2147483648) Uso de <audio> Etiqueta y archivo de activos locales
- ¿Hay una manera de cargar arbitrariamente recursos en tiempo de ejecución en Android?
- ¿Cómo obtener la ID de Android para un elemento de menú en Android?
- InputStream de la carpeta de activos de Android devuelve vacío
- Escapar comillas simples en el recurso xml para Android
12-07 16:29:22.650 V/TAG(11655): Executing HTTP Request 12-07 16:29:25.336 D/dalvikvm(11655): GC_CONCURRENT freed 366K, 50% free 2824K/5639K, external 0K/0K, paused 3ms+3ms 12-07 16:29:25.526 D/dalvikvm(11655): GC_CONCURRENT freed 450K, 52% free 2825K/5767K, external 0K/0K, paused 2ms+2ms 12-07 16:29:29.990 I/ActivityManager( 1339): Process PackageName:remote (pid 11655) has died. 12-07 16:29:29.990 I/ActivityManager( 1339): Low Memory: No more background processes.
Ahora esto acaba de lanzar dos problemas para mí:
-
En primer lugar, el tiempo de espera que he especificado no funciona:
HttpParams httpParameters = new BasicHttpParams(); int timeoutConnection = 10000; HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); int timeoutSocket = 10000; HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); HttpClient client=new DefaultHttpClient(httpParameters); HttpGet request=new HttpGet(url); Log.v(TAG,"Executing HTTP Request"); HttpResponse response=client.execute(request);
-
El segundo problema es que no puedo ver una razón por la que el proceso ha muerto – es este el mensaje 'muerto' el mismo si se está matando debido a la baja memoria? Porque el tiempo de espera no se ha alcanzado aquí (client.execute está en un bloque try / catch)
Gracias por sus respuestas!
- "@android: dibujable / ic_" vs "@ * android: drawable / ic_"
- Cambio de locale: ¿Forzar la actividad a recargar recursos?
- Obtener ID de recurso de valor
- No se encontró ningún recurso que coincida con el nombre dado
- Configuración de la configuración regional de la aplicación en pt_BR mediante programación
- Gradle Robolectric Resources NotFoundException en pruebas
- ¿Cómo mostrar una página HTML desde la carpeta raw en res con android Webview?
- ¿Cómo acceder a los recursos del proyecto de la biblioteca de Android?
Si te entiendo correctamente, me preguntas dos cosas:
- P1: ¿Por qué no funciona el tiempo de espera especificado?
- Q2. ¿Por qué murió el proceso?
Comenzando con Q2, mi conjetura es que su proceso se mata porque el tiempo de espera no funcionó y su código tomó demasiado tiempo para funcionar. Como resultado, Android lo mató.
En cuanto a Q1: hice algunos experimentos y me di cuenta de que en el emulador los tiempos de espera no funcionaba en mi aplicación también. Pruebas con el emulador API7 y API8 Siempre obtengo una UnknownHostException
después de unos 20 segundos, independientemente de cualquier tiempo de espera establecido. Esto va para el DefaultHttpClient
, así como el HttpUrlConnection
y AndroidHttpClient
.
Google reveló que otras personas también han informado de problemas con el tiempo de espera:
- http://code.google.com/p/android/issues/detail?id=2409
- El tiempo de espera de conexión HTTP no funciona
- Problemas de tiempo de espera de conexión HTTP
- Tiempo de espera de socket al realizar solicitudes HTTPGet mediante DefaultHTTPClient
Ninguna de las soluciones propuestas funcionó para mí, así que supongo que la única solución confiable es administrar los tiempos de espera.
- Transferencia de archivos a través de bluetooth como en Android
- Pantalla desactivada en el emulador de Android