仅 Galaxy Note 2 和 3 中的 OutofMemoryError
OutofMemoryError in Galaxy Note 2 and 3 only
我的应用程序在我的物理设备 (MotoG3) 和模拟器 (Nexus 5) 上运行,并在 Google Play Developer Console 上的启动前碰撞测试中通过了 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)
这在每一个 android 应用程序中都很常见。您的 AppIntroViewPager
片段中有一些图像占用了大量内存,因此您需要对其进行下采样,以免占用应用程序的所有内存。
您应该阅读这篇文章Displaying Bitmaps in Your UI并考虑使用一些图像加载库,例如 Picasso、Glide。
Galaxy Notes 具有非标准 dpi 配置。他们可能正在加载非常大的位图(或放大您提供的位图)。 (Why does my Galaxy Note 3 have the same DP dimensions as a much smaller phone?)
你有几个解决方案,
提供图像资产的所有 dpi 级别,这样系统就不必缩放缺失的分辨率。
使用图像库(例如 Glide 或 Picasso)以最佳分辨率加载图像。
最重要的是,确保文件被剪切成正确的大小。如果无法在屏幕上显示,拥有超大位图是没有用的。
我的应用程序在我的物理设备 (MotoG3) 和模拟器 (Nexus 5) 上运行,并在 Google Play Developer Console 上的启动前碰撞测试中通过了 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)
这在每一个 android 应用程序中都很常见。您的 AppIntroViewPager
片段中有一些图像占用了大量内存,因此您需要对其进行下采样,以免占用应用程序的所有内存。
您应该阅读这篇文章Displaying Bitmaps in Your UI并考虑使用一些图像加载库,例如 Picasso、Glide。
Galaxy Notes 具有非标准 dpi 配置。他们可能正在加载非常大的位图(或放大您提供的位图)。 (Why does my Galaxy Note 3 have the same DP dimensions as a much smaller phone?)
你有几个解决方案,
提供图像资产的所有 dpi 级别,这样系统就不必缩放缺失的分辨率。
使用图像库(例如 Glide 或 Picasso)以最佳分辨率加载图像。
最重要的是,确保文件被剪切成正确的大小。如果无法在屏幕上显示,拥有超大位图是没有用的。