Domanda

Sono in esecuzione in una situazione molto strana quando si utilizza il metodo () PackageManager.getInstalledPackages. La prima volta che lancio la mia attività ho un elenco valido di tutti i pacchetti installati. Ma la seconda volta che lancio il mio attività ottengo una lista vuota ... Che cosa potrebbe essere la causa?

Sto usando questo codice per ottenere l'elenco: . Lista pkglist = getPackageManager () getInstalledPackages (PackageManager.GET_ACTIVITIES);

sto costruendo contro il 1.6 SDK con compatibilità per 1.5 +

Grazie in anticipo per qualsiasi suggerimenti / aiuto ... Sono davvero sconcertato per quanto riguarda la causa e non riesco a pensare a quello che sto facendo male.

È stato utile?

Soluzione

Forse il PackageManager ha bisogno di essere richiamato sul thread dell'applicazione principale, per qualche ragione. Non ho provato ad usarlo da un AsyncTask.

UPDATE 2018/3/26 :. PackageManager in genere va bene per invocare il thread in background, getInstalledPackages() in particolare

Altri suggerimenti

Hai trovato un elenco di nuovo vuoto, perché il PackageManager è morto, perché l'IPC buffer che viene utilizzata per restituire l'elenco delle applicazioni installate cresciuto più grande di quanto non di dimensione del buffer 1 MB (a partire da 4,4).

Dal API 15, lo stesso comportamento avrebbe gettato un TransactionTooLargeException. Su <15 API solo un elenco vuoto viene restituito e anche se a volte un piccolo errore è visibile in logcats.

getInstalledPackages() non ha bisogno di essere eseguito sul thread dell'interfaccia utente. Può sembrare così, ma questo sarebbe solo incidentale. Se solo si esegue sul filo principale si ha l'effetto collaterale che impedisce chiamate simultanee che possono riempire il livello di processo condivisa IPC tampone.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top