0

Я разрабатываю приложение, которое нуждается в галерее изображений. Я нахожусь в точке, где у меня все изображения отображаются в виде сетки. когда я прикасаюсь к изображению, я хочу, чтобы он открывал действие с помощью полноэкранного изображения коснутого изображения, которое также работает, но когда я возвращаюсь в сетку и открываю другое изображение, потребление памяти продолжает расти. Я попробовал установить изображение функции на null, Bitmap.recycle() и вызвал finish() на активность, ничто не останавливает потребление памяти, когда я открываю другое изображение.Android удаляет растровое изображение из памяти, когда уходит активность

Открыть Detail активность

Intent intent = new Intent(MainActivity.this, DetailActivity.class); 
intent.putExtra("image", adapter.file[position].getPath()); 
//Start details activity 
startActivity(intent); 

Feature Image Активность

public class DetailActivity extends AppCompatActivity { 
    private Intent intent = getIntent(); 
    private Bitmap featureImage; 
    private ImageView featureView; 
    private final String TAG ="Image Detail --"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_detail); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     Bundle extras = getIntent().getExtras(); 

     final String imgPath = extras.getString("image"); 
     final BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 
     bitmapOptions.inDensity = 2; 
     bitmapOptions.inTargetDensity = 1; 

     featureImage = BitmapFactory.decodeFile(imgPath, bitmapOptions); 
     featureView = (ImageView) findViewById(R.id.featureImageView); 
     featureView.setImageBitmap(featureImage); 
    } 

    @Override 
    protected void onPause(){ 
     super.onPause(); 
     //featureImage = null; 
     //featureView.setImageBitmap(null); 
     //featureImage.recycle(); 
     this.finish(); 
    } 
} 

память продолжает грог до около 40Мб, а затем падает до 32 МБ и циклов throgh в этой модели.

Любые подсказки/предложения приветствуются.

memory monitor

+1

кажется вполне нормальным. Объекты собирают мусор по мере необходимости. Я бы поставил вопрос о том, чтобы позвонить в Finish в свою OnPause, но как простое действие, такое как вращение вашего устройства или получение телефонного звонка, завершит эту операцию. – Kuffs

+0

Спасибо @ Kuffs. Итак, вы думаете, что нет проблем? также я рассмотрю проблему 'onPause(). Я не считал, что, однако, мое приложение является носителем только из-за других функций, и я предпочитаю, чтобы возврат на домашний экран отклонялся от индивидуального изображения после нажатия кнопки «домой» на устройстве. – Lonergan6275

ответ

1

Проблема заключается в том, что вы не масштабирование изображения до размеров ImageView правильно. У вас есть два варианта:

  1. Прочитайте и внесите то, что показано в this lesson. Преимущества такого подхода заключаются в том, что вы используете только тот код, который вам нужен, недостатком является то, что для чего-то, что должно быть прямо, достаточно много работы.
  2. Используйте библиотеку, например Glide. Он прост в использовании и хорошо поддерживается. Недостаток заключается в том, что он добавляет много методов в ваш проект, которые вы в противном случае не использовали бы, добавляя размер apk.

Лично, всякий раз, когда мне нужно отображать изображение, я использую Glide!

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^