android 中可绘制图像的大小是否有限制?
Is there a limit on the size of image drawable in android?
出于测试目的,我正在尝试使用 getDrawable() 加载 3MB 图像,但出现内存泄漏异常。您可以在 android 中使用的可绘制图像的大小是否有任何限制?
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:594)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:429)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
at android.content.res.Resources.loadDrawable(Resources.java:2113)
at android.content.res.Resources.getDrawable(Resources.java:700)
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:321)
at com.testleak.MainActivity.onCreate(MainActivity.java:22)
at android.app.Activity.performCreate(Activity.java:5248)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
at android.app.ActivityThread.access0(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5097)
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:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Is there any limit on the size of image drawable you can use in android ?
是的。它必须在解码时适合可用内存。一个 3MB 的 PNG 或 JPEG 文件在解码时会大得多,因为解码后的内存使用量是宽 x 高 x 4 bytes/pixel.
"Available memory" 取决于:
您的设备根据安装的系统 RAM 施加的堆限制(请参阅 ActivityManager
和 getMemoryClass()
)
堆中最大的单个空闲内存块,这将取决于运行时的很多因素
出于测试目的,我正在尝试使用 getDrawable() 加载 3MB 图像,但出现内存泄漏异常。您可以在 android 中使用的可绘制图像的大小是否有任何限制?
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:594)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:429)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
at android.content.res.Resources.loadDrawable(Resources.java:2113)
at android.content.res.Resources.getDrawable(Resources.java:700)
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:321)
at com.testleak.MainActivity.onCreate(MainActivity.java:22)
at android.app.Activity.performCreate(Activity.java:5248)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
at android.app.ActivityThread.access0(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5097)
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:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Is there any limit on the size of image drawable you can use in android ?
是的。它必须在解码时适合可用内存。一个 3MB 的 PNG 或 JPEG 文件在解码时会大得多,因为解码后的内存使用量是宽 x 高 x 4 bytes/pixel.
"Available memory" 取决于:
您的设备根据安装的系统 RAM 施加的堆限制(请参阅
ActivityManager
和getMemoryClass()
)堆中最大的单个空闲内存块,这将取决于运行时的很多因素