我有以下代码段:
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的说法,现在有一种情况是应用崩溃时出现以下异常:
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的三星。
在我看来,这是罕见的崩溃。无论如何,什么会导致这种情况发生?我如何防止它再次发生?
答案 0 :(得分:1)
获取自己的versionName(判断您的代码,我认为您正在尝试这样做)的更好方法是调用document.setPageSize(PageSize.A4.rotate());
。这要求该应用使用gradle构建,并且版本在您的app.gradle文件中定义。
对于PackageManager问题本身,我有一个理论,尽管只是传闻(从我对问题的评论中复制):
前一段时间,我遇到了同样的问题。似乎当来自PackageManager的IPC通信尝试发送太多数据时,它以某种方式死亡。它将保持死状态,直到您的应用程序重新启动。我发现的唯一“解决方案”是使用它的标志限制getPackageInfo提供的数据。