【问题标题】:OutofMemoryError in Galaxy Note 2 and 3 only仅限 Galaxy Note 2 和 3 中的 OutofMemoryError
【发布时间】:2016-05-23 02:40:56
【问题描述】:

我的应用在我的物理设备 (MotoG3) 和模拟器 (Nexus 5) 上运行,并且在 Google Play 开发者控制台上的发布前崩溃测试中通过了 13 台设备中的 11 台的测试。它失败的两台设备在 Galaxy Note 2 和 3 (Android 4.4) 上,如下图所示 -

我不确定出了什么问题,是否有任何内存泄漏,如果有,如何解决?这对我来说是全新的。

outOfMemoryError 是 -

FATAL EXCEPTION: main
 Process: com.tdp.tdp, PID: 17269
 java.lang.OutOfMemoryError
    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:677)
    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:507)
    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:872)
    at android.content.res.Resources.loadDrawable(Resources.java:3054)
    at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
    at android.widget.ImageView.<init>(ImageView.java:133)
    at android.support.v7.widget.au.<init>(Unknown Source)
    at android.support.v7.widget.au.<init>(Unknown Source)
    at android.support.v7.a.bh.a(Unknown Source)
    at android.support.v7.a.as.c(Unknown Source)
    at android.support.v7.a.as.a(Unknown Source)
    at android.support.v4.view.ak.onCreateView(Unknown Source)
    at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:173)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:690)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
    at com.thedailypiece.thedailypiece.c.a(Unknown Source)
    at android.support.v4.app.n.b(Unknown Source)
    at android.support.v4.app.z.a(Unknown Source)
    at android.support.v4.app.z.a(Unknown Source)
    at android.support.v4.app.e.run(Unknown Source)
    at android.support.v4.app.z.e(Unknown Source)
    at android.support.v4.app.z.b(Unknown Source)
    at android.support.v4.app.ah.b(Unknown Source)
    at android.support.v4.view.ViewPager.a(Unknown Source)
    at android.support.v4.view.ViewPager.a(Unknown Source)
    at android.support.v4.view.ViewPager.a(Unknown Source)
    at android.support.v4.view.ViewPager.setCurrentItem(Unknown Source)
    at com.github.paolorotolo.appintro.AppIntroViewPager.setCurrentItem(Unknown Source)
    at com.github.paolorotolo.appintro.b.onClick(Unknown Source)
    at android.view.View.performClick(View.java:4630)
    at android.view.View$PerformClick.run(View.java:19339)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:157)
    at android.app.ActivityThread.main(ActivityThread.java:5335)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

标签: java android android-studio out-of-memory


【解决方案1】:

Galaxy Note 具有非标准 dpi 配置。他们可能正在加载非常大的位图(或放大您提供的位图)。 (Why does my Galaxy Note 3 have the same DP dimensions as a much smaller phone?)

你有几个解决方案,

提供所有 dpi 级别的图像资源,这样系统就不必缩放缺失的分辨率。

使用图片库(例如 Glide 或 Picasso)以最佳分辨率加载图片。

最重要的是,确保文件被切割成正确的大小。如果无法在屏幕上显示,那么拥有超大位图是无用的。

【讨论】:

  • 我在 drawables 中添加了所有 dpi 级别,并且正在测试 apk,如果能解决任何问题会通知您
【解决方案2】:

这在每个 Android 应用程序中都非常常见。您的 AppIntroViewPager 片段中有一些图像会占用大量内存,因此您需要对其进行下采样,以免占用应用程序的所有内存。

您应该阅读此Displaying Bitmaps in Your UI 并考虑使用一些图像加载库,例如 Picasso、Glide。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2013-01-24
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多