我有一个小活动,活动很少,每个活动都有一个图像作为背景。
由于每个图像都很大(全高清),它会快速占用内存,从而使整个应用程序因内存不足而导致缓慢甚至崩溃。
你如何处理这样的事情?
答案 0 :(得分:2)
为什么要尝试加载 Full HD 图像,因为较低的Android设备甚至无法加载它。加载全高清图像会占用你的整个内存,让你的应用程序显得迟钝。
最佳解决方案是:
hdpi: 480x800 px
)drawable-nodpi
中创建一个名为res
的文件夹(如果它尚不存在)。并将格式化的图像放在drawable-nodpi
。 drawable-nodpi
拥有适用于所有密度的资源。这些是与密度无关的资源。无论当前屏幕的密度如何,系统都不会缩放用此限定符标记的资源。
参考:
答案 1 :(得分:0)
尝试使用导入功能将照片导入您的开发环境,例如。以下是使用Android Studio导入图像资源的方法。右键单击Drawable,选择new,选择图像资源,导入图像,android将创建5个针对Android设备优化的图像,请务必使用小写字母命名图像名称。祝你好运
答案 2 :(得分:0)
根据android中的以下缩放使用图像 Check this link for more specification
xxxhdpi: 1280x1920 px
xxhdpi: 960x1600 px
xhdpi: 640x960 px
hdpi: 480x800 px
mdpi: 320x480 px
ldpi: 240x320 px
答案 3 :(得分:0)
有几种方法可以做到。
选项1:
为不同的dpi创建不同的完美图像,并将它们放在相关的可绘制文件夹中。然后设置
android:background="@drawable/your_image
选项2:
创建适合您布局的缩放位图..
/* adapt the image to the size of the display */
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
Bitmap bmp = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(
getResources(),R.drawable.background),size.x,size.y,true);
BitmapDrawable background = new BitmapDrawable(bmp );
layout.setBackgroundDrawable(background);
选项3:
每次都不需要创建bitmat图像。你可以在第一次创建后把它放在Cache内存中。然后尝试从Cache中获取如果没有找到,则再次将您的可绘制图像作为位图处理并将其放入缓存并使用它。这将是更快的过程..
有一个更详细的链接.. Caching Bitmaps