BitmapFactory.decodeFile и ImageView странная вещь в Android
У меня странная проблема - это происходит на xperia (android 4.0.3), а не на samsung S plus (2.3.6). В приложении я использую Google Maps 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(bitmap). Когда я закомментирую BitmapFactory.decodeFile проблема исчезнет. Что еще хуже, xperia отключает SD-карту при подключении к USB, и я пока не знаю, как записать фотографии в память телефона, поэтому я не могу проверить журнал (кстати: есть ли способ получить журнал позже?)
Когда я удаляю код из onCreate (), onClick () работает ровно один раз. Я пытался установить bitmap = null и setImageBitmap(null) перед декодированием, но это не помогает.
Это кажется мне очень странным, поскольку у Samsung нет проблем с тем же кодом.
Есть какое-то решение или, может быть, я делаю что-то не так?
1 ответ
Сделай одну вещь. Перед передачей для декодирования файла сэмплируйте изображение. Проверьте код ниже
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 3;
Bitmap bitmap = BitmapFactory.decodeFile(st,options);
im.setImageBitmap(bitmap);