我使用PackageManager.getInstalledPackages()方法时正在运行到一个非常奇怪的情况。第一次启动我的活动我得到的所有已安装的软件包的一个有效的列表。但是我启动我的活动我第二次得到一个空列表...怎么可能会导致这?

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

我建立针对1.6 SDK兼容性1.5 +

在此先感谢您的任何建议/帮助...我真的感到困惑,原因,并不能想到什么,我做错了。

有帮助吗?

解决方案

<击>也许PackageManager需要主应用程序线程上被调用,出于某种原因。使用它从AsyncTask我还没有尝试过。

<强> UPDATE 2018年3月26日PackageManager通常是细来调用后台线程,getInstalledPackages()特别

其他提示

你得到一个空表背,因为PackageManager死了,因为IPC缓冲区,用于返回安装的应用程序列表中增长速度超过比它的1MB缓存大小(如4.4)大。

由于API 15中,相同的行为会抛出TransactionTooLargeException。在<15层的API只是一个空列表返回虽然有时一个小错误是在logcats可见。

getInstalledPackages()并不需要在UI线程上执行。它看起来是这样,但这只会是偶然的。如果只执行它在主线程您有副作用,即它防止同时呼叫可能填补处理范围的共享IPC缓冲器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top