解决“包管理器已死”RuntimeException

Posted

技术标签:

【中文标题】解决“包管理器已死”RuntimeException【英文标题】:Solving "Package manager has died" RuntimeException 【发布时间】:2014-08-02 19:06:13 【问题描述】:

我有一个 android 应用程序,它应该列出设备上所有已安装的应用程序(无 root)。我已经尝试了PackageManagergetInstalledApplications(0)getInstalledPackages(0) 方法,但是在某些显然安装了太多应用程序的设备上,我得到“包管理器已死”RuntimeException(我通过错误收到它们Google Play 的报告服务)。这是由于众所周知的 Android 内部使用的 IPC 中每次调用 1MB 的限制。

如何解决这个问题?我不介意逐块请求长列表,但我没有看到任何方法。只有上述两种方法可用。

【问题讨论】:

哇,您的设备上有多少应用程序?无论如何,我认为每个通话 1MB 是每个正在进行的通话?那么,您是否还有其他 IPC 正在进行?比如 Content Provider 或 Intents?如果您有大量其他交易正在进行,那么此调用的限制会低得多。 那不是我的设备。这个应用程序在 Google Play 上发布,我收到了数千次安装。每周 1 次此类例外。我没有任何其他交易 - 只需致电 getInstalledPackages(0)。来自 Internet/Google 群组的 AFAIK,1MB 的限制是一次通话。 哇,那我没有什么可以帮助你的,但是如果它是一个 TransactionTooLarge 异常,从谷歌那个异常的页面上可以看出:Binder 事务缓冲区有一个有限的固定大小,当前为 1Mb,由该进程正在进行的所有事务共享。因此,当有许多事务正在进行时,即使大多数单个事务的大小适中,也可能会引发此异常。 【参考方案1】:

自 Android 5.1 以来,该问题已得到修复。您可以在Androidissuetracker中找到详细信息。

【讨论】:

以上是关于解决“包管理器已死”RuntimeException的主要内容,如果未能解决你的问题,请参考以下文章

封装异常处理之坑

Java 异常浅谈

Android Studio 按钮导致崩溃

添加 ImageView 时应用程序崩溃?

201621123026《JAVA程序设计》第十周学习总结

java.lang.RuntimeException:无法启动“jarsigner”进程,请将其添加到 PATH