我一直在努力弄清楚为什么我的应用程序持续崩溃的原因,我将其确定为将其包含在我的主要活动布局XML中。

<com.facebook.login.widget.ProfilePictureView
                        android:id="@+id/pp"
                        android:layout_gravity="center"
                        android:layout_height="match_parent"
                        android:layout_width="match_parent">
                    </com.facebook.login.widget.ProfilePictureView>


只要我在主活动布局中有此设置,并且尝试创建任何新意图(新活动,facebook登录或请求权限),我的应用程序就会因FAILED BINDER TRANSACTION和TransactionTooLargeException而崩溃。

当我在活动类中删除个人资料图片代码时,这种情况继续发生。似乎是出现了这种观点,但我不知道为什么。

这不是在我的主要测试设备上发生的,而是在我尝试过的所有模拟器和其他设备上发生的。

堆栈跟踪

03-13 15:29:21.347 28962-28962/uk.co.claytapp.taggerbath E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 1443592)
03-13 15:29:21.348 28962-28962/uk.co.claytapp.taggerbath D/AndroidRuntime: Shutting down VM
03-13 15:29:21.348 28962-28962/uk.co.claytapp.taggerbath E/AndroidRuntime: FATAL EXCEPTION: main
                                                                           Process: uk.co.claytapp.taggerbath, PID: 28962
                                                                       java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1443592 bytes
                                                                           at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3752)
                                                                           at android.os.Handler.handleCallback(Handler.java:751)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                           at android.os.Looper.loop(Looper.java:154)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
                                                                        Caused by: android.os.TransactionTooLargeException: data parcel size 1443592 bytes
                                                                           at android.os.BinderProxy.transactNative(Native Method)
                                                                           at android.os.BinderProxy.transact(Binder.java:615)
                                                                           at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3606)
                                                                           at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3744)
                                                                           at android.os.Handler.handleCallback(Handler.java:751) 
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95) 
                                                                           at android.os.Looper.loop(Looper.java:154) 
                                                                           at android.app.ActivityThread.main(ActivityThread.java:6077) 
                                                                           at java.lang.reflect.Method.invoke(Native Method) 
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

最佳答案

这很可能发生在您要离开的活动的onSaveInstanceState(Bundle outState)方法中。

要解决此问题,请将android:saveEnabled="false"添加到您的ProfilePictureView中,如下所示:

    <com.facebook.login.widget.ProfilePictureView
        android:id="@+id/profilePicture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:saveEnabled="false"
        facebook:com_facebook_preset_size="normal" />


这样可以防止Android调用ProfilePictureView自己的onSaveInstanceState方法(视图层次结构始终由Activity存储,因此不会受到伤害)。

10-07 14:29