代码之家  ›  专栏  ›  技术社区  ›  Justin

packageManager.getInstalledPackages()返回空列表

  •  2
  • Justin  · 技术社区  · 16 年前

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

    我使用此代码获取列表: list pkglist=getPackageManager().getInstalledPackages(packageManager.get_activities);

    我正在构建与1.5兼容的1.6 SDK+

    提前感谢您提供任何建议/帮助…我对事业真的很困惑,我想不出我做错了什么。

    2 回复  |  直到 8 年前
        1
  •  3
  •   CommonsWare    8 年前

    也许 PackageManager 出于某种原因,需要在主应用程序线程上调用。我还没试过用它 AsyncTask .

    更新日期:2018-03-26 : 包装工人 通常可以在后台线程上调用, getInstalledPackages() 特别地。

        2
  •  1
  •   darken    11 年前

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

    由于API 15,相同的行为将引发 TransactionTooLargeException . 在<15 API上,只返回一个空列表,但有时在logcats中会看到一个小错误。

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

    推荐文章