Question

Je suis en cours d'exécution dans une situation très étrange lorsque vous utilisez la méthode PackageManager.getInstalledPackages (). La première fois que je lance mon activité je reçois une liste valide de tous les paquets installés. Mais la deuxième fois que je lance mon activité je reçois une liste vide ... ce qui pourrait être la cause?

J'utilise ce code pour obtenir la liste: . Liste pkglist = getPackageManager () getInstalledPackages (PackageManager.GET_ACTIVITIES);

Je construis contre le SDK 1.6 pour la compatibilité avec 1,5 +

Merci d'avance pour toute suggestion / aide ... Je suis vraiment déconcerté quant à la cause et ne peut pas penser à ce que je fais mal.

Était-ce utile?

La solution

Peut-être le PackageManager doit être invoquée sur le thread principal de l'application, pour une raison quelconque. Je ne l'ai pas essayé de l'utiliser d'une AsyncTask.

UPDATE 26/03/2018 :. PackageManager est généralement très bien pour invoquer sur les fils de fond, notamment getInstalledPackages()

Autres conseils

Vous obtenez un retour de liste vide, parce que le PackageManager est mort, parce que le tampon IPC qui est utilisé pour retourner la liste des applications installées grossissait que de sa taille de la mémoire tampon 1Mo (à partir de 4.4).

Depuis l'API 15, le même comportement jetterait un TransactionTooLargeException. Sur <15 API juste une liste vide est retournée si et parfois une petite erreur est visible dans logcats.

getInstalledPackages() n'a pas besoin d'être exécuté sur le thread d'interface utilisateur. Il peut sembler de cette façon, mais cela ne serait accessoire. Si vous exécutez uniquement sur le thread principal vous avez l'effet secondaire qui empêche les appels simultanés qui pourraient combler le processus commun à l'échelle tampon IPC.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top