Pregunta

Estoy corriendo en una situación muy extraña al utilizar el método () PackageManager.getInstalledPackages. La primera vez que pongo en marcha mi actividad me sale una lista válida de todos los paquetes instalados. Pero la segunda vez que lanzo mi actividad me sale una lista vacía ... ¿Qué podría estar causando esto?

Estoy utilizando este código para obtener la lista: . Lista pkglist = getPackageManager () getInstalledPackages (PackageManager.GET_ACTIVITIES);

Estoy construyendo contra el 1.6 SDK con compatibilidad para 1.5 +

Gracias de antemano por cualquier sugerencia / ayuda ... estoy realmente confundido acerca de la causa y no puede pensar en lo que estoy haciendo mal.

¿Fue útil?

Solución

Quizás el PackageManager necesita ser invocada en el hilo principal de la aplicación, por alguna razón. No he tratado de usarlo desde una AsyncTask.

ACTUALIZACIÓN 26/03/2018 . PackageManager general está bien para invocar en las discusiones de fondo, en particular, getInstalledPackages()

Otros consejos

Usted está recibiendo una lista vacía de vuelta, porque el PackageManager murió, debido a que el IPC provisional que se usa para devolver la lista de aplicaciones instaladas creció más grande que lo que del tamaño del búfer de 1 MB (a partir de 4.4).

Desde API 15, el mismo comportamiento podría lanzar una TransactionTooLargeException. En <15 API simplemente una lista vacía se devuelve sin embargo y a veces un pequeño error es visible en logcats.

getInstalledPackages() no necesita ser ejecutado en el subproceso de interfaz de usuario. Puede parecer de esa manera, pero esto sólo sería incidental. Si sólo se ejecuta en el hilo principal que tiene el efecto secundario que evita que las llamadas simultáneas que podrían llenar el proceso de toda la compartida IPC búfer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top