严重异常:java.lang.OutOfMemoryError: EnsureLocalCapacity (FileInputStream.open0, android.graphics.Typeface.getFullFlipFont)

12

将BuildTools从23升级到27后,我面临着崩溃问题。

我已经在分析器中检查了RAM使用情况 - 没有异常。 应用程序有时在后台崩溃,有时在前台崩溃,在不同的活动中崩溃(崩溃是完全不确定的),看起来似乎不取决于内存使用情况(可以在使用350mb和200mb时都崩溃)

我还安装了'square/leakcanary'来查找任何内存泄漏,但没有发现任何问题...

似乎存在加载本地typeface的问题。 我在三星S9和三星S5上设法使应用程序崩溃。 有什么想法? :(

谢谢任何帮助!

Stacktrace:

2018-10-05 08:09:04.740 20542-20542/pl.chillout.debug E/AndroidRuntime: FATAL EXCEPTION: main
Process: pl.chillout.debug, PID: 20542
java.lang.OutOfMemoryError: EnsureLocalCapacity
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:200)
    at java.io.FileInputStream.<init>(FileInputStream.java:150)
    at android.graphics.Typeface.getFullFlipFont(Typeface.java:1275)
    at android.graphics.Typeface.getFontPathFlipFont(Typeface.java:1220)
    at android.graphics.Typeface.SetFlipFonts(Typeface.java:1413)
    at android.graphics.Typeface.SetAppTypeFace(Typeface.java:1547)
    at android.app.Activity.onCreate(Activity.java:1020)
    at android.support.v4.app.SupportActivity.onCreate(SupportActivity.java:66)
    at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:321)
    at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:84)
    at pl.chillout.redesign.activity.BaseDrawerActivity.onCreate(BaseDrawerActivity.java:45)
    at pl.chillout.redesign.activity.ChilloutActivity.onCreate(ChilloutActivity.java:115)
    at android.app.Activity.performCreate(Activity.java:7174)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6938)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

很不幸,没有。 - Cililing
1
你能发布一下代码吗? - Abdul Aziz
你解决了这个问题吗?我在S9上也遇到了同样的问题。 - mikehc
实际上我没有找到任何解决方案,但在发布版本中,我没有因此而导致应用程序崩溃。 - Cililing
6
我看到这种情况只有在连接了分析器时才会发生。可能是分析器的错误。 - abel
显示剩余6条评论
4个回答

1

实际上,我最终成功地“修复”了这个崩溃(正如我在问题评论部分提到的,该问题不适用于发布版本),通过将BuildTools从版本27升级到28。


1
你应该将这个标记为正确答案。 我刚刚通过升级到构建工具30来解决了这个问题(不知道我之前安装的版本)。 - Oderik

0

查看是否在所有视图中明确指定默认字体可以解决问题。看起来它正在尝试加载不存在的字体。

 <TextView
  .....
 android:fontFamily="sans-serif" />

你为什么这样认为?崩溃是不确定的,而字体的存在是确定的。 - Cililing
1
不一定,如果你只在特定情况下创建、重新创建或使用TextView。这可能解释了为什么崩溃发生在onCreate期间。顺便说一句,如果你打开StrictMode并简单地调用onCreate,你可以在任何应用程序中找到类似的错误。如果你没有经常遇到错误,你可以考虑忽略它。 - AardvarkBlue

0

这种情况的原因可能是您正在使用静态对象,例如:

private static TextView textView; //DO NOT DO THIS
private static Context context; //DO NOT DO THIS

这是内存泄漏的第一个迹象。

不幸的是,没有完整的代码。


不,我在写这个问题之前已经查找了内存泄漏。 - Cililing

0

请在清单文件中添加largeheap=true,然后完成所有已启动的活动。同时,请检查您的可绘制对象尺寸是否正确。我曾经在PagerView中遇到过这个问题,我调整了可绘制图像的大小,并结束了所有活动。现在,大内存占用的崩溃问题已经解决了。我认为您的错误可能与Orio设备有关,请为Orio设备初始化所有对象。


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