2

PackageManager.getInstalledPackages() メソッドを使用しているときに、非常に奇妙な状況に陥っています。アクティビティを初めて起動すると、インストールされているすべてのパッケージの有効なリストが表示されます。しかし、アクティビティを 2 回目に起動すると、空のリストが表示されます...何が原因でしょうか?

このコードを使用してリストを取得しています: List pkgList = getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES);

1.5+ と互換性のある 1.6 SDK に対してビルドしています

提案/ヘルプを事前にありがとう...私は原因について本当に困惑しており、私が間違っていることを考えることはできません.

4

2 に答える 2

2

PackageManagerなんらかの理由で、メイン アプリケーション スレッドで呼び出す必要があるかもしれません。から使ってみたことはありませんAsyncTask

UPDATE 2018-03-26 :一般に、特にPackageManagerバックグラウンド スレッドで呼び出すことは問題ありません。getInstalledPackages()

于 2010-08-11T12:14:19.790 に答える
1

インストールされたアプリのリストを返すために使用される IPC バッファが 1MB のバッファ サイズよりも大きくなったため (4.4 以降)、PackageManager が停止したため、空のリストが返されます。

API 15 以降、同じ動作でTransactionTooLargeException. 15 個未満の API では、空のリストだけが返され、logcats に小さなエラーが表示されることがあります。

getInstalledPackages()UI スレッドで実行する必要はありません。そのように見えるかもしれませんが、これは偶然にすぎません。メインスレッドでのみ実行すると、プロセス全体の共有 IPC バッファがいっぱいになる可能性のある同時呼び出しが防止されるという副作用があります。

于 2014-10-03T01:21:22.513 に答える