packagemanager.getInstalledPackages()は空のリストを返します
-
27-09-2019 - |
質問
PackageManager.getInstalledPackages()メソッドを使用すると、非常に奇妙な状況に遭遇しています。アクティビティを初めて起動すると、インストールされているすべてのパッケージの有効なリストが表示されます。しかし、2回目のアクティビティを起動すると、空のリストが表示されます...これを引き起こす可能性がありますか?
このコードを使用してリストを取得します。リストpkglist = getPackageManager()。getInstalledPackages(packagemanager.get_activities);
私は1.5+の互換性で1.6 SDKに対して構築しています
どんな提案/助けを借りてくれてありがとう...私は大義について本当に困惑していて、自分が間違っていることを考えることができません。
解決
おそらく PackageManager
何らかの理由で、メインアプリケーションスレッドで呼び出す必要があります。私はそれをanから使用しようとしていません AsyncTask
.
更新2018-03-26: PackageManager
一般的には、背景スレッドで呼び出しても問題ありません。 getInstalledPackages()
特に。
他のヒント
PackageManagerが死亡したため、空のリストを取得しています。これは、インストールされているアプリのリストを返すために使用されるIPCバッファーが1MBバッファサイズ(4.4時点で)よりも大きくなったためです。
API 15以降、同じ動作は TransactionTooLargeException
. 。 <15 APIでは、空のリストだけが返され、ログキャットでは小さなエラーが表示される場合があります。
getInstalledPackages()
UIスレッドで実行する必要はありません。それはそのように思えるかもしれませんが、これは偶発的です。メインスレッドでのみ実行すると、プロセス全体の共有IPCバッファーを埋める可能性のある同時呼び出しを防ぐ副作用があります。