Pergunta

Estou encontrando uma situação muito estranha ao usar o método PackAGEMANAGER.GetInstalledPackages (). Na primeira vez que inicio minha atividade, recebo uma lista válida de todos os pacotes instalados. Mas na segunda vez que inicio minha atividade, recebo uma lista vazia ... o que poderia estar causando isso?

Estou usando este código para obter a lista: lista pkglist = getPackageManager (). GetInstalledPackages (packageManager.get_activities);

Estou construindo contra o 1.6 SDK com compatibilidade por 1.5+

Agradecemos antecipadamente por quaisquer sugestões/ajuda ... Estou realmente confuso quanto à causa e não consigo pensar no que estou fazendo de errado.

Foi útil?

Solução

Talvez o PackageManager precisa ser chamado no encadeamento principal do aplicativo, por algum motivo. Eu não tentei usá -lo de um AsyncTask.

Atualização 2018-03-26: PackageManager Geralmente é bom chamar os threads de fundo, getInstalledPackages() em particular.

Outras dicas

Você está recebendo uma lista vazia de volta, porque o PackageManager morreu, porque o buffer IPC usado para retornar a lista de aplicativos instalados aumentou maior do que o tamanho do buffer de 1 MB (a partir de 4.4).

Desde a API 15, o mesmo comportamento jogaria um TransactionTooLargeException. Em <15 APIs, apenas uma lista vazia é retornada e, às vezes, um pequeno erro é visível em logcats.

getInstalledPackages() não precisa ser executado no thread da interface do usuário. Pode parecer assim, mas isso só seria incidental. Se você executá-lo apenas no encadeamento principal, terá o efeito colateral de que ele evita chamadas simultâneas que possam preencher o buffer IPC compartilhado em todo o processo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top