isGooglePlayServicesAvailable在Android 5中引发TransactionTooLargeException异常

6

我收到了Fabric报告的崩溃信息,在检查Google Play服务可用性时,Android 5设备(特别是OnePlus、Sony和Zuk设备)可能会崩溃。

我没有直接调用此代码,似乎是由谷歌自己的代码调用的。

根据其他帖子,异常是在Parcel过大时抛出的,然而由于我无法控制该过程,我的代码不负责创建Parcel。

我已经查看了Google Play服务的发行说明和其他帖子,但都没有找到解决办法。欢迎任何建议。

Fatal Exception: java.lang.RuntimeException: Package manager has died
       at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:112)
       at com.google.android.gms.common.zzo.isGooglePlayServicesAvailable(Unknown Source)
       at com.google.android.gms.common.zze.isGooglePlayServicesAvailable(Unknown Source)
       at com.google.android.gms.common.GoogleApiAvailability.getInstance(Unknown Source)
       at com.google.android.gms.common.api.internal.zzbr.connect(Unknown Source)
       at com.google.android.gms.common.api.internal.zzbp.zzb(Unknown Source)
       at com.google.android.gms.common.api.internal.zzbp.handleMessage(Unknown Source)
       at android.os.Handler.dispatchMessage(Handler.java:98)
       at android.os.Looper.loop(Looper.java:135)
       at android.os.HandlerThread.run(HandlerThread.java:61)
Caused by android.os.TransactionTooLargeException
       at android.os.BinderProxy.transactNative(Binder.java)
       at android.os.BinderProxy.transact(Binder.java:496)
       at android.content.pm.IPackageManager$Stub$Proxy.getPackageInfo(IPackageManager.java:1876)
       at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:107)
       at com.google.android.gms.common.zzo.isGooglePlayServicesAvailable(Unknown Source)
       at com.google.android.gms.common.zze.isGooglePlayServicesAvailable(Unknown Source)
       at com.google.android.gms.common.GoogleApiAvailability.getInstance(Unknown Source)
       at com.google.android.gms.common.api.internal.zzbr.connect(Unknown Source)
       at com.google.android.gms.common.api.internal.zzbp.zzb(Unknown Source)
       at com.google.android.gms.common.api.internal.zzbp.handleMessage(Unknown Source)
       at android.os.Handler.dispatchMessage(Handler.java:98)
       at android.os.Looper.loop(Looper.java:135)
       at android.os.HandlerThread.run(HandlerThread.java:61)
1个回答

0
根据官方的Android文档,避免TransactionTooLargeException的关键是要尽量保持所有交易相对较小。尝试最小化创建参数和远程过程调用的返回值Parcel所需的内存量,并避免传输大型字符串数组或大位图。如果可能的话,请尝试将大型请求分解为更小的部分。

1
我完全同意,但这不是我控制的代码,因为它是由Google Play服务调用的,所以我无法按照您概述的指南修复它。 - Graham Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接