2010-07-15 669 views
41

He desarrollado un widget para Android, y funcionaba bien. Agregué algunas funcionalidades adicionales e introduje una actualización en Android Market. Ahora las personas se están quejando de que ya no funciona.Cómo reparar el error "el proceso es malo" para un widget de Android?

El error que veo en los registros es:

07-14 10:33:44.016: WARN/ActivityManager(78): Unable to launch app ... 
for broadcast Intent { act=android.appwidget.action.APPWIDGET_ENABLED 
cmp=... }: process is bad 
07-14 10:33:44.026: WARN/ActivityManager(78): finishReceiver called 
but none active 
07-14 10:33:44.026: WARN/ActivityManager(78): Unable to launch app ... 
for broadcast Intent { act=android.appwidget.action.APPWIDGET_UPDATE 
cmp=... (has extras) }: process is bad 
07-14 10:33:44.036: WARN/ActivityManager(78): finishReceiver called 
but none active 

He buscado, pero no puedo encontrar en cualquier lugar lo que se quiere decir mal de error del proceso, así que no tengo ni idea de cómo solucionarlo. Al reiniciar el teléfono (o el emulador), el error desaparece; sin embargo, eso no es lo que quiero que hagan mis usuarios. ¿Podría alguien ayudarme a explicar cuál es la causa del error y cómo solucionarlo?

+1

Interesante, he visto esto también un par de veces. buscará respuestas, gracias por preguntar;) – dimsuz

+0

hola 11689466196137005894161 tuve el mismo problema después de su código – Jorgesys

Respuesta

8

Estoy teniendo el mismo problema y mi teoría actual es que el appWidget se colgó y cuando se reinició tenía la misma información persistente que lo hacía colapsar cada vez que se reiniciaba. Cuando esto sucede con demasiada frecuencia, el appWidget es "forzado a detenerse" por el sistema operativo. Mi banda es para tener un evento táctil que es "setOnClickPending" que tocará el usuario (por frustración si es necesario) y que se procesará en el appWidget y restablecerá el appWidget.

+1

Eso no funcionó en mi caso. Para mí, parece necesitar desinstalar la aplicación, reiniciar el teléfono y volver a instalarla. – Tom

9

Acabo de experimentar esto yo mismo antes de envasar para el mercado. Estaba siguiendo las directrices y añadí el androide: label = "@ string/nombre_apl" atributo al elemento de aplicación en mi manifiesta ...

  1. desinstalar su aplicación
  2. teléfono Reinicio/emulador
  3. impulso nuevos aplicación sin este atributo

Viola! ¡Funciona para mí ahora!

EDITAR: Para hacer coincidir los comentarios.

+0

Esta solución que menciona no es posible. Si trato de hacer eso, obtengo un archivo XML no válido ... – wligtenberg

+0

Mi archivo de manifiesto tiene este aspecto (y es XML válido): NPike

+0

Lo que ahora escribe es verdad. Pero en la primera publicación mencionó: android: NAME = "@ string/app_name" Que no es válido. Ahora dices etiqueta en lugar de nombre. Mi XML ya contenía android: label = "@ string/app_name" – wligtenberg

1

yo tengo la mía fijo como esto:

desinstalar la aplicación y volver a instalarlo.

recibí este error cuando instalé una aplicación de "prueba" con el mismo nombre de paquete y dañé algo en los datos de caché de la aplicación o en algún otro lugar.

+0

A veces me soluciona el problema, otras veces no. –

4

Ocurrí un error process is bad en mi HTC Sensation OS 2.3.4 después de eliminar el permiso INTERNET de mi AndroidManifest.xml.

W/ActivityManager (253): No se puede iniciar la aplicación MY_DOMAIN.flashback/10132 para el intento de emisión { act = android.intent.action.PHONE_STATE flg = 0x20000000 (tiene extras)}: proceso es malo

probé con cuidado un montón de diferentes soluciones, y encontré la única manera de solucionar era:

  • desinstalar la aplicación a través de Ajustes -> Aplicaciones.
  • Retire la batería del teléfono (utilizando el menú "Apagar" de Android hizo no trabajo).
  • Encienda el dispositivo nuevamente.
  • Instale el APK nuevamente usando adb install <myapp>.

Quiero aprovechar esta oportunidad para enumerar lo que hizo NO trabajo para mí (como parece que hay una gran cantidad de FUD acerca de cómo solucionar este error):

  • aplicación de desinstalación, reinicie el uso Menú del teléfono Android (mantenga presionado el botón y seleccione "Apagar"), enciéndalo nuevamente, vuelva a instalarlo.
  • Desinstalar, use adb kill-server, luego adb start-server, vuelva a instalar.
  • Desinstalar, ejecutar adb shell y luego ps, esto no mostró mi aplicación funcionando en absoluto.
  • Desinstalar, hacer una compilación limpia en Eclipse, reinstalar.

Me pregunto si el problema subyacente fue causado por el tamaño de mi aplicación. Creo que solía desempaquetar en flashback-1.apk y flashback-2.apk en el dispositivo, mientras que ahora solo está desempacando en un solo flashback-1.apk.

0

Me enfrenté a un problema similar. Cuando revisé mi código, me di cuenta de que eran los valores predeterminados los culpables. Asegúrese de que sus valores predeterminados sean lógicos y positivos. Por ejemplo, si tiene un servicio en segundo plano que comienza en un intervalo particular, asegúrese de que el valor predeterminado que haya establecido para el mismo sea el adecuado.

0

El problema para mí también tenía que ver con el XML, específicamente, tenía un elemento TextView que no especificaba layout_width y layout_height porque heredaban un estilo que no los contenía. Mi archivo styles.xml no fue validado por eclipse. Cuando ejecuté la aplicación, recibí el error de que estas vistas deben especificarse: cuando arreglé el error, recibí el error process is bad y tuve que forzar el cierre.

Desafortunadamente, creo que se mantuvieron algunas configuraciones, por lo que la reconstrucción de la aplicación no fue suficiente después de la corrección. Tuve que desinstalar la aplicación, reiniciar el teléfono (para eliminar algunos datos persistentes) y cuando reinstalé, recuperé el error.

2

Acabo de recibir este error. Corrijo el error y elimino algunos códigos fuente que invocan desde OnConnectionReceiver.onReceiver(), Tal vez la invocación cueste un tiempo.

2

He enfrentado este problema. la razón fue que la WLAN llama a wifi.getConnectionInfo(). getScanResults(); podría devolver un nulo en lugar de una lista vacía en algunas ocasiones. Lo encontré después de registrar el logcat durante varias horas. Cuando la aplicación encontró un error y se bloqueó, un toque en el widget me daría el mismo error de "mal proceso" que mencionas aquí, ya que la intención no reabrió la aplicación, pero se bloquea en un estado bloqueado. Supongo que es exactamente la forma en que Android trata con un widget bloqueado.

7

Me sucedió cuando mi BroadcastReceiver repetidamente goteaba una excepción que causaba que el sistema matara mi aplicación. Las próximas llamadas al receptor darían lugar a registros de "proceso malo".

La solución en mi caso era asegurarme de que no se escaparan excepciones de BroadcastReceiver.

Esos son los registros cuando la aplicación se mató (intente buscar para ellos y encontrar la causa):

W/ActivityManager﹕ Process com.company.app has crashed too many times: killing! 
I/ActivityManager﹕ Killing proc 9344:com.company.app/u0a10239: crash 
+0

¿Qué quiere decir con "filtrar una excepción"? –

+0

No se puede controlar en un bloque try-catch (o para evitar que se lance). – Vituel

-2

tuve el mismo problema con mi proyecto. Creo que vale la pena señalar que podría solucionar este problema mágicamente simplemente eliminando algunas líneas nuevas de mi código en Eclipse. A modo de ejemplo, he cambiado el código siguiente,

Intent clickIntent = new Intent(this.getApplicationContext(), 
MyWidgetProvider.class); 

a

Intent clickIntent = new Intent(this.getApplicationContext(),MyWidgetProvider.class); 
0

Un poco fuera de tema, pero en algunos dispositivos Android una manera reproducible puede causar esta falla al escribir una aplicación que crea un UncaughtExceptionHandler en onCreate para reiniciar la aplicación después de un bloqueo, y luego hace algo para causar una excepción no controlada (ya sea arrojar un RuntimeException, o hacer algo que causa un NullPointerException, o lo que sea). Algunos ejemplos de código se dan a continuación.

He intentado esto en dos dispositivos: un Samsung Galaxy Tab 2 y un Verizon Ellipsis 7. Con el Tab 2, no podría causar el problema mientras ejecutaba la aplicación de Eclipse: se colgaría y reinicie repetidamente y nunca muera. En cambio, tuve que exportar la aplicación a apk, instalar a través de adb, iniciar la aplicación, y después de 4 a 8 bloqueos y reinicios, Android mataría la aplicación con el mensaje de error anterior (Process com.buggy.app has crashed too many times: killing!).

Con el Ellipsis 7, nunca pude reproducir el problema. La aplicación buggy se bloqueaba y reiniciaba repetidamente, y el sistema operativo nunca lo mató, incluso después de 10 minutos de esto.

Código de ejemplo para la aplicación de estrellarse en repetidas ocasiones:

public void onCreate(Bundle savedInstanceState) { 
    mContext = this.getApplicationContext(); 

    UncaughtExceptionHandler uehandler = new Thread.UncaughtExceptionHandler() { 

    @Override 
    public void uncaughtException(Thread thread, Throwable ex) { 

     // restart app after 100 milliseconds 
     PendingIntent myActivity = PendingIntent.getActivity(mContext, 0, 
      new Intent(mContext, MyActivity.class), 
      PendingIntent.FLAG_ONE_SHOT); 
     AlarmManager alarmManager = (AlarmManager) 
      mContext.getSystemService(Context.ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 100, 
      myActivity); 

     System.exit(2); 

     // re-throw critical exception further to the os (important) 
     Thread.getDefaultUncaughtExceptionHandler().uncaughtException(thread, ex); 
    } 
    }; 
    Thread.setDefaultUncaughtExceptionHandler(uehandler); 

    throw new RuntimeException("Crash the app!"); 
} 
0

Yo tenía el mismo problema. Llegué a un punto donde reiniciar y volver a instalar la aplicación no resolvió el problema. Estaba frustrado. Eliminé todo de la clase que extendía AppWidgetProvider y ejecuté la aplicación con solo dos métodos vacíos: onUpdate y onReceive. Finalmente resolvió el problema.

Quizás no resuelva el suyo, pero quién sabe. Darle una oportunidad.

Cuestiones relacionadas