Android. Во время обработки изображения лучше хранить или использовать его во временной памяти?

Я пытаюсь создать приложение, которое делает снимок с камерой, и отправляет его обратно в основное действие, чтобы отобразить его в ImageVew. Я видел учебник, который сохраняет изображение на SD-карте при съемке. Я могу сохранить файл, но мне трудно получить местоположение сохраненного изображения.

Я думаю, что сохранение изображения на SD-карте – это слишком много работы, поскольку это изображение не так важно.

Есть ли способ «сохранить» изображение, которое я только что взял с помощью камеры в элементе BitMap? Если это так эффективнее, чем хранить его на SD-карте?


Вот мой MainActivity.java:

public class MainActivity extends AppCompatActivity { private Uri imgLocation; ImageView mImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button capture = (Button) findViewById(R.id.am_btn_camera); capture.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); imgLocation = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "fname_" + String.valueOf(System.currentTimeMillis()) + ".jpg")); intent.putExtra(MediaStore.EXTRA_OUTPUT, imgLocation); startActivityForResult(intent, 1); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == RESULT_OK) { Log.e("URI",imgLocation.toString()); mImageView.setImageBitmap(BitmapFactory.decodeFile(imgLocation.toString())); } }} 

Лучше всего сохранить его на внешнем / внутреннем хранилище, а затем получить к нему доступ. Еще лучше использовать стороннюю библиотеку для обработки всего изображения и их ленивой загрузки, например:

  • скольжение
  • Пикассо
  • фреска

Большинство из этих библиотек будут сосредоточены на обработке ресурсов из URL-адресов HTTP, но их все равно можно использовать для загрузки информации из локального файла или поставщика контента.

Обработка изображений с помощью растровых изображений может привести к OutOfMemoryError как показано в этой ссылке . Хотя в этом случае, поскольку вы используете только 1 Bitmap, не о чем беспокоиться.

Почти всегда лучше сохранить его в файловой системе и передать filepath к файлу в рамках activities .

Android Bitmaps буквально потребляет много памяти, и никогда не рекомендуется хранить его в памяти, если это действительно не требуется.

Я знаю, это немного хлопот, чтобы сохранить его в файловой системе и передать ссылку на файл, но это предотвратит много нежелательных ошибок outOfMemory позже в вашем приложении.

Используйте Пикассо. Он автоматически кэширует файл для вас в файловой системе.

Если вам нужно сохранить этот файл на диске в течение более длительных периодов времени, вы должны сохранить его самостоятельно.

Intereting Posts
Каков наилучший способ сохранить JNIEnv * DrawerLayout или TabLayout имеет значение null после возобновления активности из фона? LinearLayout в навигационном ящике Android подписывает конфиги и конфликтует с расколами abi Android Proguard ExceptionInInitializerError и RuntimeException Что означает «указанный для свойства« resDir »не существует». Перетаскивание с анимацией onDraglistener, чтобы вернуться в исходное положение, если не выпало на цель Android – проверка не выполнена в классе ART / Dalvik Невозможно использовать класс класса, опубликованный здесь в моем проекте Data not refreshing "DynamiteModule: класс дескриптора локального модуля для com.google.firebase.auth не найден" Получить код статуса HTTP для успешных запросов с помощью Volley Неизвестное имя анимации: decelerateInterpolator Изменение положения видео во время воспроизведения Android / Google Play: мне действительно нужен мой OWN-сервер для управления подписками на платежи inapp? Android APK не будет генерировать при выполнении