Вопрос

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

Я использую этот код, чтобы получить список: список pkglist = getpackageManager (). Getinstalledpackages (packagemanager.get_activities);

Я строю против 1,6 SDK с совместимостью для 1,5+

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

Это было полезно?

Решение

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

Обновление 2018-03-26: PackageManager как правило, в порядке, чтобы вызвать на фоновых потоках, getInstalledPackages() особенно.

Другие советы

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

Поскольку API 15, то же самое поведение бросило бы TransactionTooLargeException. Отказ На <15 API API просто возвращается пустой список, а иногда и небольшая ошибка видима в логах.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top