PackageManager.getInstalledPackages()返回空列表

时间:2010-08-11 06:24:11

标签: android packages installed-applications

使用PackageManager.getInstalledPackages()方法时,我遇到了一个非常奇怪的情况。我第一次启动活动时,会获得所有已安装软件包的有效列表。但是第二次启动我的活动时,我得到一个空列表......可能导致这种情况的原因是什么?

我正在使用此代码获取列表: 列出pkgList = getPackageManager()。getInstalledPackages(PackageManager.GET_ACTIVITIES);

我正在构建1.6 SDK,兼容1.5 +

提前感谢任何建议/帮助......我对原因感到困惑,不能想到我做错了什么。

2 个答案:

答案 0 :(得分:3)

由于某种原因,可能需要在主应用程序线程上调用PackageManager。我没有尝试使用AsyncTask

更新2018-03-26 PackageManager通常可以在后台线程上调用,特别是getInstalledPackages()

答案 1 :(得分:1)

你得到一个空列表,因为PackageManager死了,因为用于返回已安装应用程序列表的IPC缓冲区比它的1MB缓冲区大小(从4.4开始)大。

从API 15开始,相同的行为会引发TransactionTooLargeException。在< 15 API上只返回一个空列表,有时在logcats中可以看到一个小错误。

getInstalledPackages()不需要在UI线程上执行。这似乎是这样,但这只是偶然的。如果只在主线程上执行它,则会产生副作用,它会阻止同时调用可能会填满进程范围内的共享IPC缓冲区。