마스터Q&A
접속유지
가입하기
안드로이드 Q&A
최근 질문
미답변 질문
태그
사용자
질문하기
마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다.
안드로이드펍
에서 운영하고 있습니다. [
사용법
,
운영진
]
인기있는 태그
초보어플개발
(3427)
안드로이드스튜디오
(2664)
안드로이드-초보어플개발
(1333)
안드로이드-스튜디오
(1086)
도와주세요-
(995)
이미지
(970)
listview
(866)
리스트뷰
(844)
오류
(805)
레이아웃
(693)
fragment
(675)
webview
(670)
그리드뷰로 달력만들때 속도관련해서 질문드리겠습니다.
0
추천
현재 연습삼아 만들고있는 어플에 달력이 들어갑니다. 요일표시 7개와 날짜표시 42개로 이루어진 달력속 날마다 데이터를 입력하고 달력에 표시되도록 만들어놨는데 데이터가 그닥 많은건아닌데 로딩?속도가 너무오래걸립니다.
리스트뷰로 만들어논 목록을 눌러 달력을 볼수있는데 눌르고 약 2초가량멈춘후 화면이 뜨게됩니다.
이미지가 표시되는것도아닌데 이렇게 속도가느린이유를 도저히모르겠습니다.
고수님들 답변 부탁드립니다 ㅠㅠ.
그리드뷰
달력
안드로이드-초보어플개발
속도
로딩
kanoo
(
2,720
포인트)
님이
2017년 2월 9일
질문
Please
log in
or
register
to add a comment.
답변 달기
·
글에 소스 코드 보기 좋게 넣는 법
·
질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
답변이 채택되거나 답변에 댓글이 달리면 이메일로 알려드립니다:
답변이 채택되거나 댓글이 달리면 이메일로 알려드립니다
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면
로그인
하거나 혹은
가입
하세요.
1개의 답변
0
추천
채택된 답변
질문자님이 의심부분 코드를 올려주셔야 정확한 판단이 가능합니다.
내용 보면 대충 화면에 뷰가 많이 사용될거 같은데
findViewById 함수가 생각보다 오버헤드가 큽니다.
그리드뷰를 사용하셨다고 하셨는데 위의 이슈를 최소화 하시려면 뷰홀더패턴을 사용하셔야 하는데 그리 하셨는지 궁금하네요.
저는 정말 답답해서 모든라인다음줄에 로그를 찍어 걸리는 시간을 확인한적이 있습니다.
이렇게라도 해서 정확한 원인파악을 하시는것이 중요합니다.
Development Guy
(
70,570
포인트)
님이
2017년 2월 9일
답변
kanoo
님이
2017년 2월 10일
채택됨
private Context mContext;
private List<alba_calendar_data> grid;
public alba_calendar_adapter(Context context, List<alba_calendar_data> data){
this.mContext = context;
this.grid = data;
}
@Override
public int getCount() {
return grid.size();
}
@Override
public Object getItem(int position) {
return grid.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null){
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.fragment_alba_info_caledar_grid,null);
ViewHolder holder = new ViewHolder();
holder.day_num = (TextView) convertView.findViewById(R.id.day_num);
holder.today = (TextView) convertView.findViewById(R.id.today_line);
holder.time = (TextView)convertView.findViewById(R.id.grid_time);
holder.over = (TextView) convertView.findViewById(R.id.grid_over);
holder.break_t = (TextView) convertView.findViewById(R.id.grid_break);
holder.night = (TextView) convertView.findViewById(R.id.grid_night);
holder.vaca = (TextView) convertView.findViewById(R.id.grid_vaca);
holder.week_t = (TextView) convertView.findViewById(R.id.grid_week);
holder.memo = (TextView) convertView.findViewById(R.id.grid_memo);
convertView.setTag(holder);
}
alba_calendar_data data = grid.get(position);
if(data!=null) {
ViewHolder holder = (ViewHolder)convertView.getTag();
convertView.setBackgroundResource(R.drawable.back);
holder.today.setVisibility(View.INVISIBLE);
holder.time.setVisibility(View.INVISIBLE);
holder.over.setVisibility(View.INVISIBLE);
holder.break_t.setVisibility(View.INVISIBLE);
holder.night.setVisibility(View.INVISIBLE);
holder.vaca.setVisibility(View.INVISIBLE);
holder.week_t.setVisibility(View.INVISIBLE);
holder.memo.setVisibility(View.INVISIBLE);
if (position % 7 == 0) {
holder.day_num.setTextColor(convertView.getResources().getColor(R.color.red));
} else if (position % 7 == 6) {
holder.day_num.setTextColor(convertView.getResources().getColor(R.color.blue));
}
if (data.getInMont() == 0) {
holder.time.setText("");
holder.day_num.setText(data.getWeek());
} else if (data.getInMont() == 1 || data.getInMont() == 4) {
convertView.setBackgroundResource(R.drawable.back1);
holder.day_num.setTextColor(convertView.getResources().getColor(R.color.gray));
holder.day_num.setText(data.getDay() + "");
} else if (data.getInMont() == 2 || data.getInMont() == 3) {
holder.day_num.setText(data.getDay() + "");
}
if (data.getInMont() == 3)
holder.today.setVisibility(View.VISIBLE);
if (data.getRun_time() > 0) {
holder.time.setVisibility(View.VISIBLE);
holder.time.setText(String.format("%02d:%02d", data.getRun_time() / 60, data.getRun_time() % 60)+"\n"+makeStringComma(data.getTot_money()) + "");
try {
if (data.getMemo().length() != 0) holder.memo.setVisibility(View.VISIBLE);
} catch (NullPointerException e) {
}
if (data.getBreak_time() > 0)
holder.break_t.setVisibility(View.VISIBLE);
if (data.getNight_time() > 0)
holder.night.setVisibility(View.VISIBLE);
if (data.getVaca() > 0)
holder.vaca.setVisibility(View.VISIBLE);
if (data.getOver_time() > 0)
holder.over.setVisibility(View.VISIBLE);
if (data.getWeek_time() > 0)
holder.week_t.setVisibility(View.VISIBLE);
}
}
return convertView;
}
static class ViewHolder{
TextView time,day_num,today,over,night,vaca,break_t,memo,week_t;
}
protected String makeStringComma(int str) {
long value = str;
DecimalFormat format = new DecimalFormat("###,###");
return format.format(value);
}
}
소스어떤식으로 올려야하지 모르겠어서 이렇게 올립니다 ㅠㅠ
말씀해주신데로 로그찍어서 해봤는데 어뎁터로 뿌려주는 구간이 이상하게도
다끝나고 프레그먼트 뷰 리턴할때 시작되고 뿌려주는작업이 끝나야 화면이 보이네요... 확실이 어뎁터뷰에서 시간을 많이잡아먹는듯한데 어떤식으로 줄여야할지 감이안옵니다 ㅠㅠ xml에서도 뷰나 레이아웃을 최소화했고 클레스파일에서도 뷰홀더 해놓았는데 뭐가문제인지모르겠습니다...
자답 입니다. 말씀하신데로 findViewById를 줄이니 속도가 많이개선되었습니다.
감사합니다!
Please
log in
or
register
to add a comment.
...