27 votes

Erreur "Impossible d'instancier l'activité"

L'une de mes applications Android a environ 100 000 utilisateurs et, environ 10 fois par semaine, je reçois l'exception suivante rapportée à moi par l'intermédiaire de Google sur le marché de l'outil:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.rebm.asp/org.rebm.asp.MainActivity}:
  java.lang.ClassNotFoundException: org.rebm.asp.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/org.rebm.asp-1/pkg.apk]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2753)
at android.app.ActivityThread.access$2500(ActivityThread.java:129)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2107)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4701)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: org.rebm.asp.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/org.rebm.asp-1/pkg.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2651)
... 11 more

De la recherche en ligne, cette erreur indique généralement quelque chose est incorrect avec le fichier manifest et les noms de package utilisé. Cependant, je ne peux pas reproduire cette erreur sur mon propre appareil ou sur l'émulateur. Je ne connais de cette erreur par le biais du marché de l'outil. Tout ce que je peux conclure, c'est que c'est rare d'erreur parce que je sais que beaucoup de gens sont à l'aide de l'application et aucun des examens d'indiquer qu'il se bloque.

Personne ne sait ce que le problème pourrait être ou comment je peut le diagnostiquer?

15voto

paracycle Points 4021

La trace de la pile que vous donnez à la question contient la preuve que le problème est dû à l'évolution de l'application sur la carte SD:

java.lang.RuntimeException: Impossible de instancier activité ComponentInfo{org.rebm.asp/org.rebm.asp.MainActivity}: java.lang.ClassNotFoundException: org.rebm.asp.MainActivity dans le chargeur dalvik.système.PathClassLoader[/mnt/asec/org.rebm.asp-1/pkg.apk]

Comme vous pouvez le voir, le chemin d'accès à votre application contient le répertoire/mnt/asec qui est le Android application sécurisée point de montage.

Afin de vérifier si ce problème se produit en raison de Apps2SD, vous devriez vérifier pour voir si toutes les traces de la pile vous devez inclure le répertoire/mnt/asec répertoire dans le chemin d'accès à votre application. Si ils sont tous aussi, vous pouvez être sûr que c'est un Apps2SD erreur.

Comme d'autres l'ont dit, ces types de problèmes parfois survenir en raison de la carte SD n'est pas disponible lorsque l'application est en cours de chargement ou de corruption de l'asec partition sur la carte SD.

Est-ce que votre application, en quelque sorte, s'inscrire à lancer au démarrage ou est-il une sorte de widget que le système devrait essayer de chargement, même si la carte SD n'a pas été monté encore? Si oui, peut-être, vous devez désactiver la possibilité de déplacer l'application sur la carte SD.

2voto

Chuck Walters Points 21

Avoir le même problème "rare" sur tous les jeux publiés.

Cela peut être un problème avec les installations sur la carte SD ou le déplacement de l'application sur la carte SD, puis le retrait de la carte SD.

Une autre supposition est que l'application est téléchargée ou installée plusieurs fois en quelque sorte.

Je n'ai pas été en mesure de reproduire cela, donc je n'ai pas pu le clouer non plus.

2voto

Shahab Points 3012

Eh bien, il ya quelques suggestions qui peuvent vous aider à déboguer votre application. Espérons qu'ils résoudre votre problème. Publiez aussi vos Android fichier Manifeste XML et votre MainActivity de la Méthode onCreate extrait de sorte que nous pourrions également vous aider à déboguer et réduire le nombre de possibilités ...

Suggestions:

1) Dans votre Android XML , vérifiez si votre minimum Sdk version (android:minSdkVersion="3") est de 3 ? Si c'est le changement à 7+ . J'ai trouvé cette astuce utile, parfois, tout en faisant face avec de rares questions.

2) Dans votre Android XML, vérifiez que vous avez enregistré votre Activité. Si non, merci de vous inscrire, chaque nouvelle activité doit être enregistré avant de l'utiliser. Si votre activité est enregistré, vérifiez le chemin d'accès que vous fournissez, il est également correct.

3) Nettoyez le projet et de le créer encore une fois , de sorte que le R.java est mis à jour et n'utilise pas tout les fichiers mis en cache.

4) la migration de votre projet , créer un nouveau projet et copier tous vos fichiers. Il résout également les rares questions.

5) Selon l'une l'utilisateur :

Je viens de recevoir le même message d'erreur (Impossible d'instancier l'activité...) avec Opera Mini. Opera Mini est sur la carte SD (déplacé vers la carte SD dans l'application de configuration). L'erreur semble être lié au fait que j'ai échangé la carte SD hier. L'appareil a été arrêté, j'ai copié toutes les données de l'ancienne carte au cours de la nouvelle carte (avec cp-a), puis inséré la nouvelle carte et a commencé à nouveau l'appareil. Tout semble fonctionner comme prévu, mais je vois maintenant que toutes les applications sur la carte SD bloque avec le même message d'erreur.

Device: HTC Desire HD (Android 2.2)
Old SDHC card: SanDisk 8GB class 4
New SDHC card: Kingston 16GB class 4

Donc, je dirais que c'est un Android bug et non pas quelque chose qui peut être corrigé par les développeurs d'application.

Voir aussi: http://android-developers.blogspot.com/2010/07/apps-on-sd-card-details.html

It has always been the case that when you swap SD cards on an Android device, if you physically copy the contents of the old card to the new one, the system will use the data on the new card as if nothing had changed. This is also true of apps which have been installed on the SD card."

Cela semble être incorrect.

Espérons que l'un de ces résoudre votre problème.

1voto

Vladimir Ivanov Points 23731

J'ai eu ce problème mais pas avec l'activité. Corrigé avec une solution de contournement:

 ClassLoader myClassLoader = TroubleClass.class.getClassLoader();
Thread.currentThread().setContextClassLoader(myClassLoader);
 

1voto

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X