GridView из-за ошибки памяти - PullRequest
2 голосов
/ 03 июня 2010

Я использую GridView для отображения миниатюр из MediaStore. Если я запускаю и закрываю приложение 2-3 раза, оно выходит из ошибка памяти System.gc () вызывается в onCreate основной активности. Если комментарий вызовите setImageURI, то ошибок нет. Может мне нужно как-то явно очистить память? Пожалуйста, помогите.

   public View getView(int position, View convertView, ViewGroup parent){
           ImageView i;
           if (convertView == null) {
                   i = new ImageView(activity.getApplicationContext());
                   i.setLayoutParams(new GridView.LayoutParams(92, 92));
                   i.setScaleType(ImageView.ScaleType.CENTER_CROP);
           } else {
                   i = (ImageView) convertView;
           }
           Uri imageUri = thumbUri(position);
           i.setImageURI(imageUri);   //  <--- no error if this string is commented
           return i;
   }

Ответы [ 2 ]

4 голосов
/ 04 июня 2010

Я понял. Мое решение основано на ответе Франческо, но вместо OnDestroy вместо OnDestroy.

@Override
protected void onPause() {
    GridView gridView = (GridView) findViewById(R.id.public_photos);
    int count = gridView.getCount();
    for (int i = 0; i < count; i++) {
        ImageView v = (ImageView) gridView.getChildAt(i);
        if (v != null) {
            if (v.getDrawable() != null) v.getDrawable().setCallback(null);
        }
    }
    super.onPause();
}
3 голосов
/ 04 июня 2010

Кажется, вы теряете память в другом месте. Попробуйте удалить все обратные вызовы из вашего ImageView примерно так:

@Override
protected void onDestroy(){
    super.onDestroy();

    int count = gridView.getCount();
    for (int i = 0; i < count; i++){

        final ImageView v = (ImageView) gridView.getChildAt(i);
        v.getDrawable().setCallback(null);
    }



}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...