Приложение с пользовательским изображением не запускается, если его не использовать в течение долгого времени
Имеется приложение с кнопкой "Загрузить", при нажатии на которую, пользователю предлагается выбор картинки из галереи. Картинка устанавливается на фон и подгружается при каждом входе. Это работает, но есть проблема. Если долго не запускать приложение, к примеру, недели 2. То в один момент, при попытке запуска оно просто вылетит и все. Дальше его нужно переустанавливать и загружать в него картинку заново. Мне неизвестен точный срок, после которого появляется данная проблема, но я сам сталкивался с ней 2 раза. Из-за чего это происходит и как можно устранить?
Код:
public class MainActivity extends AppCompatActivity {
Button open;
ImageView iv_test;
SharedPreferences preferences;
final int SELECT_PHOTO = 1234;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
preferences = getSharedPreferences("APP", Context.MODE_PRIVATE);
String uriString = preferences.getString("image_uri", "");
iv_test = (ImageView)findViewById(R.id.imageView);
if (uriString != null) {
try {
iv_test.setImageBitmap(bitmapFromUri(Uri.parse(uriString)));
} catch (IOException e) {
e.printStackTrace();
}
}
open = (Button) findViewById(R.id.opgalbtn);
open.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("image/*");
startActivityForResult(intent, SELECT_PHOTO);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SELECT_PHOTO && resultCode == Activity.RESULT_OK) {
Uri selected = data.getData();
iv_test.setImageURI(selected);
preferences.edit().putString("image_uri", selected.toString()).apply();
}
}
private Bitmap bitmapFromUri(Uri uri) throws IOException {
ParcelFileDescriptor contentResolver = getContentResolver().openFileDescriptor(uri, "r");
FileDescriptor fileDescriptorlet = contentResolver.getFileDescriptor();
Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptorlet);
contentResolver.close();
return image;
}
}