web-dev-qa-db-fra.com

Comment réparer l'erreur "process is bad" pour un widget Android?

J'ai développé un widget Android et tout fonctionnait bien. J'ai ajouté des fonctionnalités supplémentaires et poussé une mise à jour via Android Market. Maintenant, les gens se plaignent que cela ne fonctionne plus.

L'erreur que je vois dans les journaux est la suivante:

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 

J'ai effectué une recherche, mais je ne trouve nulle part ce que le processus signifie est une erreur grave, je n'ai donc aucune idée de la façon de le réparer . Redémarrer le téléphone (ou l'émulateur) fait disparaître l'erreur, mais ce n'est pas ce que je cherche. Je veux que mes utilisateurs fassent… .. Quelqu'un pourrait-il m'aider, s'il vous plaît, à expliquer la cause de l'erreur et à y remédier?

44
wligtenberg

Je rencontre le même problème et ma théorie actuelle est que l'application a été bloquée et que, lors de son redémarrage, elle contenait les mêmes mauvaises données persistantes qui l'ont fait planter à chaque démarrage. Lorsque cela se produit trop souvent, l'application est "forcée" par le système d'exploitation. Mon aide de bande est d'avoir un événement tactile "setOnClickPending" que l'utilisateur va toucher (par frustration si nécessaire) et qui sera traité en interne dans l'application et réinitialisera l'application.

8
mobibob

Je viens d’expérimenter cela moi-même juste avant l’emballage pour le marché. Je suivais les instructions et ajoutais l'attribut Android: label = "@ string/app_name" à l'élément d'application dans mon manifeste ...

  1. Désinstallez votre application
  2. Redémarrer le téléphone/émulateur
  3. Push nouvelle application sans cet attribut

Alto! Travaille pour moi maintenant! 

EDIT: pour correspondre aux commentaires.

9
NPike

Cela m’est arrivé lorsque mon BroadcastReceiver présentait à plusieurs reprises une exception provoquant l’arrêt de mon application par le système . Les prochains appels au destinataire entraîneraient l’enregistrement de "processus est incorrect".

La solution dans mon cas était de s’assurer qu’aucune exception ne fuyait du BroadcastReceiver.

Ce sont les journaux lorsque l'application est supprimée (essayez de les rechercher et de trouver la cause):

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

J'ai rencontré une erreur process is bad sur mon HTC Sensation OS 2.3.4 après avoir supprimé l'autorisation INTERNET de mon AndroidManifest.xml.

W/ActivityManager (253): impossible de lancer l'application MY_DOMAIN.flashback/10132 pour l’intention de diffusion { act = Android.intent.action.PHONE_STATE flg = 0x20000000 (comporte des extras)}: le processus est mauvais

J'ai soigneusement essayé de nombreuses solutions de contournement et j'ai trouvé que le seul moyen de résoudre le problème était:

  • Désinstallez l'application via Paramètres -> Applications.
  • Retirez la batterie du téléphone (à l’aide du menu Android "Éteindre", ne fonctionnait pas).
  • Allumez l'appareil à nouveau.
  • Installez à nouveau l'APK en utilisant adb install <myapp>.

Je veux profiter de cette occasion pour énumérer ce qui ne fonctionnait pas pour moi PAS (car il semble y avoir beaucoup de FUD sur la façon de corriger cette erreur):

  • Désinstallez l'application, redémarrez à l'aide du menu du téléphone Android (maintenez le bouton enfoncé et choisissez «Éteindre»), réactivez-le, réinstallez-le.
  • Désinstallez, utilisez adb kill-server, puis adb start-server, réinstallez.
  • Désinstallez, lancez adb Shell puis ps, cela ne montre pas mon application en cours d'exécution.
  • Désinstallez, effectuez une nouvelle construction dans Eclipse, réinstallez-le.

Je me demande si le problème sous-jacent a été causé par la réduction de la taille de mon application. Je pense qu'il était habituel de décompresser flashback-1.apk et flashback-2.apk sur l'appareil, alors que maintenant, il ne décompresse qu'en un seul flashback-1.apk.

4
Dan J

Je viens de recevoir cette erreur. Je corrige l'erreur et je supprime une partie du code source qui appelle de OnConnectionReceiver.onReceiver(), peut-être que l'invocation prendra du temps.

2
tsinyun

J'ai fait face à ce problème. la raison en était que l'appel WLAN wifi.getConnectionInfo (). getScanResults (); pourrait renvoyer un null à la place d'une liste vide à certaines occasions. J'ai trouvé cela après avoir enregistré le logcat pendant plusieurs heures. Lorsque l'application rencontrait une erreur et se bloquait, une simple pression sur le widget me donnerait la même erreur de "processus incorrect" que vous mentionnez ici puisque l'intention ne rouvrait pas l'application, mais restait bloquée dans un état bloqué. Je suppose que c'est comme ça qu'Android gère un widget qui s'est écrasé.

2
Jacob L

j'ai le mien réparé comme ça:

désinstallez l'application et réinstallez-la.

j'ai eu cette erreur quand j'ai installé une application "test" avec le même nom de paquet et que quelque chose a foiré dans les données du cache de l'application.

1
Record413123

Le problème pour moi était également lié au XML. En particulier, j'avais un élément TextView qui ne spécifiait pas layout_width ni layout_height car ils héritaient d'un style qui ne les contenait pas. Mon fichier styles.xml n'a pas été validé pour cela par Eclipse. Lorsque j'ai exécuté l'application, j'ai eu l'erreur de préciser que ces vues devaient être spécifiées. Lorsque j'ai corrigé l'erreur, j'ai reçu l'erreur process is bad et j'ai dû forcer la fermeture. 

Malheureusement, je pense que certains paramètres ont été conservés, donc la reconstruction de l'application ne suffisait pas après le correctif. Je devais désinstaller l'application - redémarrer le téléphone (pour éliminer certaines données persistantes) et lorsque j'ai réinstallé le système, j'ai récupéré l'erreur.

0
bbengfort

J'ai eu le même problème. Je suis arrivé à un point où le redémarrage et la réinstallation de l'application ne résolvaient pas le problème. J'étais frustré. J'ai supprimé tout le contenu de la classe ayant étendu AppWidgetProvider et exécuté l'application avec uniquement deux méthodes vides: onUpdate et onReceive. Enfin résolu le problème.

Peut-être que ça ne résoudra pas le tien, mais qui sait. Essaie.

0
Mitulát báti

Un peu hors sujet, mais sur certains appareils Android, cet échec peut être reproduit de manière reproductible en écrivant une application créant une variable UncaughtExceptionHandler dans onCreate afin de la redémarrer après un blocage, puis en provoquant une exception non gérée (soit en jetant une RuntimeException, ou faire quelque chose qui cause une NullPointerException, ou autre chose). Quelques exemples de code sont donnés ci-dessous.

J'ai essayé ceci sur deux appareils: un Samsung Galaxy Tab 2 et un Verizon Ellipsis 7. Avec l'onglet 2, je ne pouvais pas causer le problème lorsque j'exécutais l'application depuis Eclipse - il se plantait et redémarrait de manière répétée et jamais. être tué. Au lieu de cela, je devais exporter l'application vers apk, l'installer via adb, démarrer l'application, et après 4 à 8 pannes et redémarrages, Android tuerait l'application avec le message d'erreur ci-dessus (Process com.buggy.app has crashed too many times: killing!).

Avec l’Ellipsis 7, je n’ai jamais pu reproduire le problème. L'application buggy plantait et redémarrait à plusieurs reprises, et le système d'exploitation ne l'avait jamais tué, même après 10 minutes.

Exemple de code pour une application qui plante plusieurs fois:

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
abeboparebop

J'ai fait face à un problème similaire. En parcourant mon code, je me suis rendu compte que c’était la valeur par défaut qui était la cause. Assurez-vous que vos valeurs par défaut sont logiques et positives. Par exemple, si vous disposez d'un service en arrière-plan commençant à un intervalle particulier, assurez-vous que la valeur par défaut que vous avez définie pour celui-ci est appropriée. 

0
diptia