마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

gridview 디스플레이속도관련문제!

0 추천
public class MyContents extends AppCompatActivity {
    GridView gridView;
    String[] thumbArr;
    ArrayList<String> list;
    LinearLayout linearLayout;
    String multiTemplatePath= Environment.getExternalStorageDirectory().getPath()+"/Lewi/Edit/multiTemplate";
    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_contents);
        gridView=(GridView)findViewById(R.id.gridView);
        linearLayout=(LinearLayout)findViewById(R.id.container);
        list=new ArrayList<String>();
        File file=new File(multiTemplatePath);
        String[] multi1=file.list();

        for (int i=0;i<multi1.length;i++){
            String multi2=multi1[i];
            File multi3=new File(multiTemplatePath+"/"+multi2);
            String[] multi4=multi3.list();
            for (int j=0;j<multi4.length;j++){
                String thumb=multi3+"/"+multi4[j]+"/thumb";
                File thumbFile=new File(thumb);
                String[] lists=thumbFile.list();
                list.add(thumb+"/"+lists[0]);
            }


        }
        thumbArr=new String[list.size()];
        for (int i=0;i<list.size();i++){
            thumbArr[i]=list.get(i);
        }
        CustomAdapter customAdapter=new CustomAdapter(this,R.layout.low,thumbArr);
        gridView.setAdapter(customAdapter);


    }
    class CustomAdapter extends BaseAdapter{
        Context context;
        int layout;
        String[] img;
        LayoutInflater inflater;

        public CustomAdapter(Context context,int layout,String[] img){
            this.context=context;
            this.layout=layout;
            this.img=img;
            inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
        @Override
        public int getCount() {
            return img.length;
        }

        @Override
        public Object getItem(int position) {
            return img[position];
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder=null;
            if (convertView==null){
                viewHolder=new ViewHolder();
                convertView=inflater.inflate(layout,null);
                viewHolder.view1=(ImageView)convertView.findViewById(R.id.imageView2);
                viewHolder.view2=(TextView)convertView.findViewById(R.id.textView3);
                BitmapFactory.Options options=new BitmapFactory.Options();
                options.inSampleSize=4;
                Bitmap bmp= BitmapFactory.decodeFile(img[position], options);
                bmp=Bitmap.createScaledBitmap(bmp,500,500,false);

//                viewHolder.view1.setImageBitmap(bmp);
                Glide.with(context).load(img[position]).override(200,200).into(viewHolder.view1);
            }
            return convertView;
        }

    }
    static class ViewHolder{
        public ImageView view1;
        public TextView view2;
    }
}

일단 제 소스입니다 String[] img에있는 파일들을 불러오는건데

보시다시피 glide를 사용도해보고 그냥 bitmap파일로 만들어서 해보기도했는데 이문제가아닌것같고

알고리즘이 잘못해서 쓸데없는일을 많이하는가싶네요..

로그캣에

04-14 11:32:43.979 29417-29417/com.example.joseph.gellery_image D/Activity: #1 setTransGradationModeColor false
04-14 11:32:44.689 29417-29417/com.example.joseph.gellery_image D/dalvikvm: GC_FOR_ALLOC freed 2528K, 31% free 8700K/12568K, paused 13ms, total 13ms
04-14 11:32:45.004 29417-29417/com.example.joseph.gellery_image D/dalvikvm: GC_FOR_ALLOC freed 1330K, 32% free 8597K/12568K, paused 12ms, total 13ms
04-14 11:32:45.284 29417-29417/com.example.joseph.gellery_image D/dalvikvm: GC_FOR_ALLOC freed 1220K, 32% free 8604K/12568K, paused 13ms, total 13ms
04-14 11:32:45.799 29417-29417/com.example.joseph.gellery_image D/dalvikvm: GC_FOR_ALLOC freed 2439K, 32% free 8618K/12568K, paused 12ms, total 12ms

 

이렇게 나옵니다 이거하는시간때문에 거의 2초 있다가 뜹니다 어디가 잘못된거죠?! ㅠㅠ

완전허접한질문일지라도 도와주십쇼!!!ㅠㅠ

JesusLovesYou (2,700 포인트) 님이 2016년 4월 14일 질문

1개의 답변

+1 추천
 
채택된 답변
garbage collector가 계속 도는게, 이미지 사이즈가 너무 크거나 재활용이 안되는 듯 합니다.

이미지 사이즈를 가능하면 줄이던지, 사전에 하게 변경하시고,

가급적  universal image loader 같은 것을 사용해서 Async 방식으로 로드하게 바꾸시는게 좋을 듯 합니다.

그리고 이건 속도와는 차이가 없지만 ViewHolder를 사용하시면서 getTag, setTag를 안하시는 이유는 있나요? 아니면 사용하게 변경 해 주셔야 할 듯 한데요.
익명사용자 님이 2016년 4월 14일 답변
JesusLovesYou님이 2016년 4월 14일 채택됨
...