我正在开发一个 android 应用程序,它在一页中有七个滑块。即,有七个问题,每个问题对应一个滑块。用户可以通过在每个滑块中滑动指针来回答问题。在 S3 中,此页面正在崩溃。我们在本节中使用高分辨率图像。
这是由于 S3 中的堆大小较小吗?我们能解决这个问题吗?有什么方法可以解决这个问题吗?对于这个框架,我们是否需要使用质量较差的图像(这是不可取的)?
我正在开发一个 android 应用程序,它在一页中有七个滑块。即,有七个问题,每个问题对应一个滑块。用户可以通过在每个滑块中滑动指针来回答问题。在 S3 中,此页面正在崩溃。我们在本节中使用高分辨率图像。
这是由于 S3 中的堆大小较小吗?我们能解决这个问题吗?有什么方法可以解决这个问题吗?对于这个框架,我们是否需要使用质量较差的图像(这是不可取的)?
您是否有效地加载位图?
如果是,那么您可以尝试通过使用来增加堆大小
android:largeHeap="true"
在<application>
AndroidManifest 文件中的标签中。
警告:
- 更大的堆大小意味着更长的 GC(垃圾收集)时间。
- 如果你让你的应用程序堆大小变大,它会显着降低其他应用程序的速度,用户很快就会知道你的应用程序是问题所在。
- 不要仅仅因为你得到内存错误而使用这个选项。
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html。
有效地加载位图。请参阅将缩小的版本加载到内存中主题下的链接。
不使用时回收位图。
http://www.youtube.com/watch?v=_CruQY55HOk。谈话是关于内存管理的。如果运行内存泄漏,您可以使用 MAT Analyzer 查找并修复问题。该视频还讨论了堆和 MAT Analyzer 的使用。
使用下面的方法设置从这个链接获得的 ImageView 中的图像对我有用
public Bitmap ShrinkBitmap(String file, int width, int height){
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);
int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)height);
int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)width);
if (heightRatio > 1 || widthRatio > 1)
{
if (heightRatio > widthRatio)
{
bmpFactoryOptions.inSampleSize = heightRatio;
} else {
bmpFactoryOptions.inSampleSize = widthRatio;
}
}
bmpFactoryOptions.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);
return bitmap;
}