Frage

Ich laufe in eine sehr merkwürdige Situation, wenn der PackageManager.getInstalledPackages () -Methode. Das erste Mal, dass ich meine Tätigkeit starten erhalte ich eine gültige Liste aller installierten Pakete. Aber das zweite Mal, dass ich meine Tätigkeit starten erhalte ich eine leere Liste ... Was möglicherweise diese verursachen könnte?

Ich bin mit diesem Code, um die Liste zu bekommen: . Liste pkgList = getPackageManager () getInstalledPackages (PackageManager.GET_ACTIVITIES);

Ich baue gegen das 1.6 SDK mit Kompatibilität für 1.5 +

Vielen Dank im Voraus für jede Vorschläge / Hilfe ... Ich bin über die Ursache wirklich verwirrt und denken kann, nicht von dem, was ich falsch mache.

War es hilfreich?

Lösung

Vielleicht muss der PackageManager auf dem Hauptanwendungsthread aufgerufen werden, aus irgendeinem Grund. Ich habe nicht versucht, es von einem AsyncTask verwenden.

UPDATE 2018.03.26 . PackageManager im Allgemeinen ist in Ordnung auf Hintergrund-Threads, getInstalledPackages() insbesondere aufzurufen

Andere Tipps

Sie sind eine leere Liste zurück bekommen, weil die Package gestorben, weil der IPC, dass Puffer verwendet wird, um die Liste der installierten Anwendungen zurückzukehren wuchs größer als als es die 1MB Puffergröße (ab 4.4).

Da API 15, würde das gleiche Verhalten einen TransactionTooLargeException werfen. Auf <15 APIs nur eine leere Liste zurückgegeben, obwohl manchmal ein kleiner Fehler ist sichtbar in logcats.

getInstalledPackages() braucht nicht auf dem UI-Thread ausgeführt werden. Es kann auf diese Weise erscheinen, aber dies würde nur nebensächlich sein. Wenn Sie es nur auf dem Haupt-Thread ausführen müssen Sie den Nebeneffekt, dass es Gespräche gleichzeitig verhindert, dass der Prozess weiter füllen könnte gemeinsame IPC-Puffer.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top