Android OutOfMemory

时间:2017-06-29 18:28:30

标签: android performance android-imageview android-memory

我的问题是什么(KISS)? 在详细显示第3张图片后,我的应用程序崩溃导致OutOfMemory

关于我的应用的背景信息: 我做了一个离线超市。所有产品都显示在ListView中。 我使用的所有图像都由SugarORM存储为sqlite数据库中的字符串(来自每个图像的Uri)。 ListView元素有一个ArrayAdapter,其中设置了ListView中每个Item的Information。 像这样:

 ImageView imageView = (ImageView) rowView.findViewById(R.id.productimage);
 Handler handler = new Handler();
 handler.post(new Runnable() {
     @Override
     public void run() {
       imageView.setImageURI(productList.get(position).getPictureUri());
       handler.removeCallbacks(this);
     }
 });

我的意图是,将图像加载到背景中以便点击它,甚至在加载图像之前(但它对我不起作用:/图像已显示,但我无法点击任何其他视图元素加载图像时)。 “getPictureUri”从管理员为产品选择的图片中获取URI,其中包含以下代码:

Intent pickPhoto = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickPhoto,1);

的AndroidManifest.xml

android:hardwareAccelerated="false"
android:largeHeap="true"

我只从“ AppCompatActivity ”扩展(工具栏需要)。含义:我甚至不使用“活动”。

任何人都可以给我一个很好的建议,如何清除缓存的图像(我认为这可能是问题)而且,也许你们中的一个有时间帮助我进行“图像异步加载,而你能够在您的应用中自由移动“问题。

1 个答案:

答案 0 :(得分:1)

使用setImageUri()对内存非常密集,尤其是在尝试从本地资源加载大型位图时。相反,对任何/所有图像加载任务使用经过验证的真实解决方案,如PicassoGlide。这些库将脱机工作,绝对可以从指向本地资源的URI加载图像,并且最有可能解决图像加载时的所有内存问题。