首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetPackageInfo导致DeadObjectException

GetPackageInfo导致DeadObjectException
EN

Stack Overflow用户
提问于 2019-03-20 14:40:21
回答 1查看 875关注 0票数 5

我有以下代码片段:

代码语言:javascript
复制
 public static String getAppVersion(Context context) {

        String versionName = null;
        try {
            versionName = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName; //This is the problematic line
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }
        return versionName;
    }

根据Crashlytics的说法,当应用程序崩溃时,出现了一个例外情况:

代码语言:javascript
复制
Caused by android.os.DeadObjectException
com.tawkon.data.lib.util.ParameterUtils.getAppVersion
    android.os.BinderProxy.transactNative (Binder.java)
    android.os.BinderProxy.transact (Binder.java:503)
    android.content.pm.IPackageManager$Stub$Proxy.getPackageInfo (IPackageManager.java:2684)
    android.app.ApplicationPackageManager.getPackageInfo (ApplicationPackageManager.java:193)
    com.tawkon.data.lib.util.ParameterUtils.getAppVersion (ParameterUtils.java:44)
    com.tawkon.data.lib.helper.analytics.NetworkRequestHelper.generateHttpRequest (NetworkRequestHelper.java:28)
    com.tawkon.data.lib.service.DataThroughputScanJobIntentService$2.onTestFinished (DataThroughputScanJobIntentService.java:342)
    com.tawkon.data.lib.collector.DataThroughputManager$1.run (DataThroughputManager.java:171) 

该设备规格是三星与OS 6。

在我的情况下,这似乎是一次罕见的坠机。无论如何,是什么会导致这种情况发生呢?我怎样才能防止它再次发生呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-20 14:47:03

获取您自己的versionName的一个更好的方法(我认为您正在尝试这样做,判断您的代码)是调用BuildConfig.VERSION_NAME。这要求应用程序是用gradle构建的,并且版本是在app.gradle文件中定义的。

对于PackageManager问题本身,我有一个理论,尽管只是轶事(抄袭我对这个问题的评论):

不久前我也遇到了同样的问题。似乎当来自PackageManager的IPC通信试图发送太多的数据时,它会以某种方式消失。在你的应用程序重新启动之前,它会一直死气沉沉。我找到的唯一“解决方案”是限制getPackageInfo提供的带有它标志的数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55263437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档