5

我在Google Play商店中有一个活跃的应用程序。自从几个月以来,我在Play Console上收到了很多奇怪的崩溃报告。Android 7.x上的三星Galaxy设备发生大量OutOfMemoryError

因为我无法在这里粘贴所有数据(有很多崩溃报告),我试图展示一个很好的总结。请求详细信息。

晴受影响的设备:

  • 三星Galaxy A5 2016(a5xelte)
  • 三星galaxys5(klte)
  • 三星Galaxy A5(2017)(a5y17lte)
  • 三星Galaxy注3(HLTE )
  • Samsung Galaxy S5 Neo(s5neolte)
  • Samsung Galaxy S6(zeroflte)

ND:

  • java.lang.RuntimeExceptionandroid.app.ActivityThread.performLaunchActivity
  • java.lang.OutOfMemoryErrorjava.lang.StringFactory.newStringFromBytes
  • java.lang.OutOfMemoryErrorlibcore.util.CharsetUtils.toUtf8Bytes
  • java.lang.OutOfMemoryError在:比别人

    类型崩溃的第一装置是非常关键java.lang.StringFactory.newStringFromChars

  • java.lang.StringBuilder.toString
  • java.lang.OutOfMemoryErrorjava.lang.StringFactory.newStringFromChars

的Android版本:7.0,7.1和6.0很少

我不知道这是为什么这些设备上发生的事情,我不知道该怎么调试这些报告,我没有发现任何类似的StackOverflow或任何其他来源。任何帮助?


EDIT,一些踪迹:

三星Galaxy A5(2016)(a5xelte),2048MB RAM,机器人7.0

java.lang.RuntimeException: 
    at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2984) 
    at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3045) 
    at android.app.ActivityThread.-wrap14 (ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1642) 
    at android.os.Handler.dispatchMessage (Handler.java:102) 
    at android.os.Looper.loop (Looper.java:154) 
    at android.app.ActivityThread.main (ActivityThread.java:6776) 
    at java.lang.reflect.Method.invoke (Method.java) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1496) 
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1386) 

三星Galaxy S6边缘(zerolte),3072MB RAM ,Android 7.0

java.lang.OutOfMemoryError: 
    at java.lang.StringFactory.newStringFromBytes (StringFactory.java:185) 
    at java.lang.StringFactory.newStringFromBytes (StringFactory.java:63) 
    at android.util.Base64.encodeToString (Base64.java:456) 
    at org.chromium.android_webview.AwContents.loadDataWithBaseURL (AwContents.java:428) 
    at com.android.webview.chromium.WebViewChromium.loadDataWithBaseURL (WebViewChromium.java:188) 
    at android.webkit.WebView.loadDataWithBaseURL (WebView.java:1015) 
    at com.google.android.gms.ads.internal.webview.p.loadDataWithBaseURL (p.java:131) 
    at com.google.android.gms.ads.internal.webview.o.loadDataWithBaseURL (o.java:104) 
    at com.google.android.gms.ads.internal.renderer.i.a (i.java:8) 
    at com.google.android.gms.ads.internal.renderer.a.c (a.java:35) 
    at com.google.android.gms.ads.internal.renderer.g.a (g.java:11) 
    at com.google.android.gms.ads.internal.zzk.run (zzk.java:28) 
    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:6682) 
    at java.lang.reflect.Method.invoke (Method.java) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1520) 
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1410) 

Samsung Galaxy A5(2016)(a5xelte), 2048MB RAM,Android的7.0

java.lang.OutOfMemoryError: 
    at libcore.util.CharsetUtils.toUtf8Bytes (CharsetUtils.java) 
    at java.lang.String.getBytes (String.java:879) 
    at java.lang.String.getBytes (String.java:851) 
    at org.chromium.android_webview.AwContents.loadDataWithBaseURL (AwContents.java:428) 
    at com.android.webview.chromium.WebViewChromium.loadDataWithBaseURL (WebViewChromium.java:188) 
    at android.webkit.WebView.loadDataWithBaseURL (WebView.java:1015) 
    at com.google.android.gms.ads.internal.webview.p.loadDataWithBaseURL (p.java:131) 
    at com.google.android.gms.ads.internal.webview.o.loadDataWithBaseURL (o.java:104) 
    at com.google.android.gms.ads.internal.renderer.i.a (i.java:8) 
    at com.google.android.gms.ads.internal.renderer.a.c (a.java:35) 
    at com.google.android.gms.ads.internal.renderer.g.a (g.java:11) 
    at com.google.android.gms.ads.internal.zzk.run (zzk.java:28) 
    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:6776) 
    at java.lang.reflect.Method.invoke (Method.java) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1496) 
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1386) 

编辑2:我更新的firebase-ads的依赖关系,但我仍然有同样的崩溃。另外,我在这个版本的新碰撞类型:

三星Galaxy A5(2016)(a5xelte),2048MB内存,安卓7.0

java.lang.InternalError: 
    at java.lang.Thread.nativeCreate (Thread.java) 
    at java.lang.Thread.start (Thread.java:731) 
    at java.util.concurrent.ThreadPoolExecutor.addWorker (ThreadPoolExecutor.java:941) 
    at java.util.concurrent.ThreadPoolExecutor.processWorkerExit (ThreadPoolExecutor.java:1009) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1151) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:607) 
    at java.lang.Thread.run (Thread.java:762) 
+1

请张贴实际的完整的堆栈跟踪,而不仅仅是错误消息。 – CommonsWare

+0

用某些堆栈跟踪编辑 – AndroidGuy

+1

后两者来自Play Services的广告代码。确保你在他们的图书馆的最新版本。 – CommonsWare

回答

3

我不想解决这个方式,但它似乎加入

largeHeap="true" 

到我的清单来解决。

我得出的结论是:三星Galaxy设备的内存对三星的优化程度很差(Galaxy A5 2016拥有2GB内存,这足够了,但在Firebase上,由于堆很少,我可以看到OOM)。所以,我决定一劳永逸地解决问题,并且让我的大脑变得真实。我对这个选择并不感到自豪,但它似乎是唯一可行的。

结果:所有奥姆斯似乎要消失了,现在

+0

这对第一个列出的错误有帮助吗? RuntimeException在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984)(Samsung Galaxy A5) – OferR

+0

@OferR你应该发布完整的堆栈跟踪 – AndroidGuy

+0

我的问题是这个解决方案是否帮助你解决*你有问题在*你的问题。您列出的第一个堆栈跟踪。应用largeHeap =“true”后,这些错误是否消失? (你所列出的问题是我的第一个问题,它显示了android.app.ActivityThread.performLaunchActivity中的RuntimeException,其中你的堆栈跟踪显示了OutOfMemoryError)...谢谢... – OferR

2

让我们来看看最后的堆栈跟踪,分段:

java.lang.OutOfMemoryError: 
    at libcore.util.CharsetUtils.toUtf8Bytes (CharsetUtils.java) 
    at java.lang.String.getBytes (String.java:879) 
    at java.lang.String.getBytes (String.java:851) 

所以,这炸毁了具体的事情被转换Stringbyte[]。要么你堆空间很短,要么是一个相当大的字符串。

at org.chromium.android_webview.AwContents.loadDataWithBaseURL (AwContents.java:428) 
    at com.android.webview.chromium.WebViewChromium.loadDataWithBaseURL (WebViewChromium.java:188) 
    at android.webkit.WebView.loadDataWithBaseURL (WebView.java:1015) 

所以,在这里我们可以看到,与String事情是WebView,通过loadDataWithBaseURL()。这表明有一些网址叫做loadDataWithBaseURL()。一个data: URL将是一种可能性。

at com.google.android.gms.ads.internal.webview.p.loadDataWithBaseURL (p.java:131) 
    at com.google.android.gms.ads.internal.webview.o.loadDataWithBaseURL (o.java:104) 
    at com.google.android.gms.ads.internal.renderer.i.a (i.java:8) 
    at com.google.android.gms.ads.internal.renderer.a.c (a.java:35) 
    at com.google.android.gms.ads.internal.renderer.g.a (g.java:11) 
    at com.google.android.gms.ads.internal.zzk.run (zzk.java:28) 

在这里,我们有六行代码都来自同一个Java包。 com.google.android.gms是大部分Play服务的顶级软件包,因此com.google.android.gms.ads可能是他们的广告库之一。我没有使用很多Play服务,所以我并不熟悉他们仍然拥有哪些广告网络品牌以及哪些品牌映射到com.google.android.gms.ads

因此,请检查您的广告网络库,并确保您使用的是最新最好的支持。幸运的是,这是他们在图书馆某个地方固定的一个错误。

+0

谢谢你指点我。我在'firebase-core'和'firebase-ads'上都使用了旧版本。我希望最新版本能够解决所有Galaxy设备的问题(即使在执行LauncherActivity时匿名的RuntimeException)。手指划过:) – AndroidGuy

+1

@AndroidGuy:对于第一个堆栈跟踪,如果没有其他更多的东西,那么你可以对它做些什么。没有指向你的代码或库的识别特征。而且,如果这就是你所得到的,请考虑使用其他方法来获取你的崩溃日志。通常,这些堆栈跟踪有多个节('RuntimeException'和一堆行,后面跟着''引起'',另一个异常和一堆行)。你可能会在后面的章节中报告你真正存在的问题,但是如果你没有这部分堆栈跟踪,那么你的运气不好。 – CommonsWare

+0

这就是问题所在。但我注意到,像第一个堆栈跟踪中的崩溃都来自Android 7.0上的Galaxy设备。这让我觉得它与'firebase-ads'库或'firebase-core'中的问题有关(它们都具有相同的旧版本号)。我最新发布了两个库的更新。如果这不起作用,我已经将'firebase-crash'放到依赖关系中,它会启用对Firebase控制台的崩溃报告,我希望它能够帮助我获得更准确的堆栈跟踪。 – AndroidGuy

相关问题