[Android] java.lang.OutOfMemoryError on Android 12
artyom-v opened this issue · 13 comments
Unity: v2020.3.26f1
Plugin: 19a3d9d4f064d1f814138aedc5dc1ffa061cb3a8
java.lang.OutOfMemoryError:
at android.os.Parcel.createString8Array (Parcel.java:1489)
at android.content.pm.ApplicationInfo.<init> (ApplicationInfo.java:1999)
at android.content.pm.ApplicationInfo.<init> (ApplicationInfo.java:62)
at android.content.pm.ApplicationInfo$1.lambda$createFromParcel$0 (ApplicationInfo.java:1968)
at android.content.pm.ApplicationInfo$1$$ExternalSyntheticLambda0.readRawParceled (Unknown Source)
at android.os.Parcel.readSquashed (Parcel.java:2134)
at android.content.pm.ApplicationInfo$1.createFromParcel (ApplicationInfo.java:1968)
at android.content.pm.ApplicationInfo$1.createFromParcel (ApplicationInfo.java:1965)
at android.os.Parcel.readParcelable (Parcel.java:3345)
at android.os.Parcel.readValue (Parcel.java:3238)
at android.os.Parcel.readArrayMapInternal (Parcel.java:3635)
at android.os.BaseBundle.initializeFromParcelLocked (BaseBundle.java:292)
at android.os.BaseBundle.unparcel (BaseBundle.java:236)
at android.os.BaseBundle.getString (BaseBundle.java:1196)
at com.unity.androidnotifications.UnityNotificationUtilities.deserializeNotificationCustom (UnityNotificationUtilities.java:300)
at com.unity.androidnotifications.UnityNotificationUtilities.deserializeNotificationIntent (UnityNotificationUtilities.java:219)
at com.unity.androidnotifications.UnityNotificationUtilities.deserializeNotificationIntent (UnityNotificationUtilities.java:206)
at com.unity.androidnotifications.UnityNotificationManager.loadNotificationIntents (UnityNotificationManager.java:429)
at com.unity.androidnotifications.UnityNotificationRestartOnBootReceiver.onReceive (UnityNotificationRestartOnBootReceiver.java:23)
at android.app.ActivityThread.handleReceiver (ActivityThread.java:4763)
at android.app.ActivityThread.access$1700 (ActivityThread.java:310)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2294)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loopOnce (Looper.java:226)
at android.os.Looper.loop (Looper.java:313)
at android.app.ActivityThread.main (ActivityThread.java:8641)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:567)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1133)
The exception occurred on different user devices with Android 12 only
The big icon size used for the notification is 256x256 32bpp
Could you provide the image itself?
We have pretty much exact crash stack trace after testing out 2.0.0
Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 4929737064 byte allocation with 2097152 free bytes and 506MB until OOM, target footprint 7867904, growth limit 536870912
at android.os.Parcel.createString8Array(Parcel.java:1489)
at android.content.pm.ApplicationInfo.<init>(ApplicationInfo.java:1999)
at android.content.pm.ApplicationInfo.<init>(ApplicationInfo.java:62)
at android.content.pm.ApplicationInfo$1.lambda$createFromParcel$0(ApplicationInfo.java:1968)
at android.content.pm.ApplicationInfo$1$$ExternalSyntheticLambda0.readRawParceled()
at android.os.Parcel.readSquashed(Parcel.java:2134)
at android.content.pm.ApplicationInfo$1.createFromParcel(ApplicationInfo.java:1968)
at android.content.pm.ApplicationInfo$1.createFromParcel(ApplicationInfo.java:1965)
at android.os.Parcel.readParcelable(Parcel.java:3345)
at android.os.Parcel.readValue(Parcel.java:3238)
at android.os.Parcel.readArrayMapInternal(Parcel.java:3635)
at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:292)
at android.os.BaseBundle.unparcel(BaseBundle.java:236)
at android.os.BaseBundle.getString(BaseBundle.java:1196)
at com.unity.androidnotifications.UnityNotificationUtilities.deserializeNotificationCustom(SourceFile:300)
at com.unity.androidnotifications.UnityNotificationUtilities.deserializeNotificationIntent(SourceFile:219)
at com.unity.androidnotifications.UnityNotificationUtilities.deserializeNotificationIntent(SourceFile:206)
at com.unity.androidnotifications.UnityNotificationManager.loadNotificationIntents(SourceFile:429)
at com.unity.androidnotifications.UnityNotificationRestartOnBootReceiver.onReceive(SourceFile:23)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:4763)
at android.app.ActivityThread.access$1800(ActivityThread.java:310)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2294)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8641)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1133)
Should be fixed in latest.
Will that be 2.0.2 and higher?
No, it should be fixed in 2.0.1.
I don't see it in the changelog for 2.0.1 and the 2.0.1 tag was created on the commit before this was merged. Just to make sure, I've downloaded 2.0.1 and I don't see the changes in UnityNotificationUtilities.java
. Should I be looking somewhere else?
Missed when writing notes :(
To be clear , I don't see the changes from pull request #179 in tag 2.0.1 and I don't see the changes from that pull request in the UnityNotificationUtilities.java
file inside the 2.0.1 package I just grabbed from the Unity Package Manager. If the changes are in there, am I looking at the wrong file? This is the file I'm checking:
AppData\Local\Unity\cache\packages\packages.unity.com\com.unity.mobile.notifications@2.0.1\Runtime\Android\Plugins\com\unity\androidnotifications\UnityNotificationUtilities.java
Ah, got confused by how git shows commit history. It did land after commit that is 2.0.1, so it will be out with next one.
Great, thanks for confirming!
@aurimasc facing the same issue. Do you now when the fix will be published?
@aurimasc Guys, why you think that catching OutOfMemoryError fixes the problem?
In my Crashlytics the error looks like this:
Fatal Exception: java.lang.OutOfMemoryError
Failed to allocate a 4792046832 byte allocation with 2097152 free bytes and 253MB until OOM, target footprint 4961960, growth limit 268435456
So it looks like the data layout is broken and some random binary (4792046832) is read like a string length in bytes.