PackageManager.getInstalledPackages () возвращает пустой список - PullRequest
2 голосов
/ 11 августа 2010

Я сталкиваюсь с очень странной ситуацией при использовании метода PackageManager.getInstalledPackages (). При первом запуске я получаю действительный список всех установленных пакетов. Но во второй раз, когда я запускаю свою деятельность, я получаю пустой список ... Что может быть причиной этого?

Я использую этот код для получения списка: List pkgList = getPackageManager (). GetInstalledPackages (PackageManager.GET_ACTIVITIES);

Я строю против 1.6 SDK с совместимостью для 1.5 +

Заранее спасибо за любые предложения / помощь ... Я действительно сбит с толку относительно причины и не могу думать о том, что я делаю неправильно.

Ответы [ 2 ]

3 голосов
/ 11 августа 2010

Возможно, по какой-то причине необходимо вызвать PackageManager в главном потоке приложения.Я не пробовал использовать его из AsyncTask.

ОБНОВЛЕНИЕ 2018-03-26 : PackageManager обычно нормально вызывать в фоновых потоках, getInstalledPackages()в частности.

1 голос
/ 03 октября 2014

Вы получаете пустой список обратно, потому что PackageManager умер, потому что буфер IPC, который используется для возврата списка установленных приложений, стал больше, чем его размер буфера 1 МБ (по состоянию на 4.4).

Начиная с API 15, такое же поведение выдает TransactionTooLargeException. В API <15 возвращается только пустой список, и иногда в logcats видна небольшая ошибка. </p>

getInstalledPackages() не требуется выполнять в потоке пользовательского интерфейса. Может показаться, что так, но это будет только случайным. Если вы выполняете его только в главном потоке, у вас есть побочный эффект, заключающийся в том, что он предотвращает одновременные вызовы, которые могут заполнить общий для всего процесса IPC-буфер.

...