質問

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バッファーを埋める可能性のある同時呼び出しを防ぐ副作用があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top