Custom GridView көптеген кескіндерді жүктеу кезінде жадтың қателігінен шығады

Менде gridview үшін реттелетін орналасу бар. Gridview әрбір шикізатында шарлау тақтасы, екі сурет және екі мәтін көрінісі бар. Кескін өлшемі нобай өлшемдері. Мен бірнеше битмапты жүктеуге тура келеді, мысалы: - 500-ден астам сурет, ол жадтың қателігін тудырады. суреттер Интернеттен бірінші рет жүктеледі, содан кейін SD картасында сақталады және келесі жолы SD картасынан жүктеп жатқан торды жүктеу кезінде. Бұл мәселені қалай жеңуге болады. Егер gridview жалғыз көрініспен толтырылған болса, еске алудан бас тарту үшін көптеген жауаптар таптым. Пожалуйста, осы мәселені қалай жоюға ұсынамын, пайдаланушы жоспарын пайдалану. Егер сіз білесіз бе, бұл мысалдар жобаларды білесіздер, олар оны жадтан қате жұмыс істейді gridview, сондай-ақ грильде пайдаланушы кестесін ұлғайтады.

0
stackoverflow.com/questions/16789676/…. Әмбебап бейнені жүктеуші арқылы жалқау жүктеуді қолданыңыз.
қосылды автор Raghunandan, көзі

7 жауаптар

Қолданбаны кеңейтетін класс жасау жақсы болар еді. Бұл   қосымшаның сыныбы сізге әрдайым onlowmemory() қоңырауды береді   қосымша жад азаяды. онда жаза аласыз

     

onLowmemory() {

ашық void      

Runtime.getRuntime (). gc (); }

     

жүйенің GC әдісін шақырады. Қоқыс жинаушы орындағаннан кейін   android барлық пайдаланылмаған нысандарды қоқыс тастайды.

     

Бұл мәселені шешудің тағы бір жолы бар. Анимацияда сіз қоңырау шала аласыз   Runtime.getRuntime (). Gc (); қоқыс жинаушыны шақыру. сонымен қатар   usdestroy() әдісінің әрекеті u Runtime.getRuntime() деп аталады. gc ();

     

сондықтан мәселеңіз шешіледі

2
қосылды

try this code set in image for gridview out of memory

BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;//you set size qulity for image(2,3,,4,5,6,7,8 etc..) 
Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options);

суретіңізде осы нүктелік кескінді орнатыңыз

0
қосылды

try this code set in image for gridview out of memory

BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;//you set size qulity for image(2,3,,4,5,6,7,8 etc..) 
Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options);

суретіңізде осы нүктелік кескінді орнатыңыз

0
қосылды

Осы кодпен жадты алып тастау мәселесін шешіңіз

Bitmap bitmap = BitmapFactory.decodeStream(is);
if (bitmap != null) {
    Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, 100, 100, true);
    imageView = new ImageView(mContext);
    imageView.setImageBitmap(resizedBitmap);
}
0
қосылды

Осы кодпен жадты алып тастау мәселесін шешіңіз

Bitmap bitmap = BitmapFactory.decodeStream(is);
if (bitmap != null) {
    Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, 100, 100, true);
    imageView = new ImageView(mContext);
    imageView.setImageBitmap(resizedBitmap);
}
0
қосылды

Мен сол мәселемен айналысамын. OutOfMemoryError әдетте туындады Бірінші тәсіл - бұл

BitmapFactory.decodeFile(srcImg);

Кескіндер бейнелеуден бұрын нүктелік суретке айналдырылғандықтан, үлкен нүктелік кескіндердің көбі әдетте қатені тудырады.

Мұны жеңу үшін келесі функцияны қостым

public static Bitmap decodeWithBounds(String srcImg, int bounds) {
    if (bounds > 0){
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(srcImg, options);

        if (options.outHeight > bounds || options.outWidth > bounds){
            options.inSampleSize = Math.max(options.outHeight/bounds, options.outWidth/bounds);
        }
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(srcImg, options);
    } else {
        return BitmapFactory.decodeFile(srcImg);
    }
}

Бұл функцияны битовый кескінді декодтау үшін пайдаланамын, шекара = тордың өлшемі.

Бұл көптеген проблеманы шешті.

Өте төменгі құрылғыны қосу үшін try {} catch (OutOfMemoryError e) {} ...

0
қосылды

Мен сол мәселемен айналысамын. OutOfMemoryError әдетте туындады Бірінші тәсіл - бұл

BitmapFactory.decodeFile(srcImg);

Кескіндер бейнелеуден бұрын нүктелік суретке айналдырылғандықтан, үлкен нүктелік кескіндердің көбі әдетте қатені тудырады.

Мұны жеңу үшін келесі функцияны қостым

public static Bitmap decodeWithBounds(String srcImg, int bounds) {
    if (bounds > 0){
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(srcImg, options);

        if (options.outHeight > bounds || options.outWidth > bounds){
            options.inSampleSize = Math.max(options.outHeight/bounds, options.outWidth/bounds);
        }
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(srcImg, options);
    } else {
        return BitmapFactory.decodeFile(srcImg);
    }
}

Бұл функцияны битовый кескінді декодтау үшін пайдаланамын, шекара = тордың өлшемі.

Бұл көптеген проблеманы шешті.

Өте төменгі құрылғыны қосу үшін try {} catch (OutOfMemoryError e) {} ...

0
қосылды