Android中的BitmapFactory.decodeFile和ImageView奇怪的东西

时间:2013-10-22 08:46:19

标签: android bitmap android-imageview hang

我有一个奇怪的问题 - 它发生在xperia(android 4.0.3)上,但不发生在samsung S plus(2.3.6)上。在应用程序中我使用谷歌地图APIv2与支持库(在另一个活动。不确定是否重要)。

我认为我已将问题缩小到:

private Bitmap bitmap;
private String st;
private static final String PHOTO_DIR = "photodir";

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    [...]
    st = Environment.getExternalStorageDirectory().toString() + "/" + PHOTO_DIR  + "/test.jpg";
    bitmap = BitmapFactory.decodeFile(st);
    ImageView im = (ImageView) findViewById(R.id.imv_Photo);
    im.setImageBitmap(bitmap);
    [...]

这可以按预期工作。但是这个:

@Override
public void onClick(View v)
{
    try
    {
        ImageView im = (ImageView) findViewById(R.id.imv_Photo);
        String st = Environment.getExternalStorageDirectory().toString() + "/" + PHOTO_DIR  + "/test1.jpg";
        Bitmap bitmap = BitmapFactory.decodeFile(st);
        im.setImageBitmap(bitmap);
    }
    catch (Exception e)
    {
        // null
    }
}

挂起应用程序(尽管有try / catch块!),即使删除了im.setImageBitmap(位图)。当我注释掉BitmapFactory.decodeFile时,问题消失了。更糟糕的是xperia在插入USB时卸载sd-card,我不知道如何将图片写入手机内存,所以我无法检查日志(顺便说一句:有没有办法在以后获取日志?)

当我从onCreate()中删除代码时,onClick()只运行一次。我尝试在解码之前设置bitmap = null和setImageBitmap(null),但它没有帮助。

这对我来说似乎很奇怪,因为三星对相同的代码没有任何问题。

有没有解决方案或者我做错了什么?

1 个答案:

答案 0 :(得分:4)

做一件事。在传递给解码文件之前对图像进行采样。检查下面的代码

BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 3;


Bitmap bitmap = BitmapFactory.decodeFile(st,options);
    im.setImageBitmap(bitmap);