【发布时间】:2016-02-12 20:38:03
【问题描述】:
我有一个ListView,它有 2,000 个项目。当我向下滚动时 - 第一个 appx. 300 个项目以极快的速度滚动,然后开始滞后。奇怪的是,在列表加载后,我得到了四个GC freed (some memory),当我快速滚动时,我得到更多:
Background partial concurrent mark sweep GC freed 103571(3MB) AllocSpace objects, 4(1398KB) LOS objects, 39% free, 15MB/26MB, paused 12.591ms total 122.076ms
我的ListView 有:
android:animationCache="false"
android:scrollingCache="false"
代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
if (convertView == null) {
int type = getItemViewType(position);
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewHolder holder;
switch (type) {
case TYPE_ITEM:
rowView = inflater.inflate(R.layout.row_view_new, null);
holder = new ViewHolder();
holder.tvBrewery =(TextView) rowView.findViewById(R.id.browar);
holder.tvTitle = (TextView) rowView.findViewById(R.id.row_title);
//holder.tvStyle = (TextView) convertView.findViewById(R.id.gatunek);
rowView.setTag(holder);
break;
case TYPE_SECTION:
rowView = inflater.inflate(R.layout.section_row_view, null);
holder = new ViewHolder();
holder.tvTitle = (TextView) rowView.findViewById(R.id.row_title);
rowView.setTag(holder);
break;
}
}
ViewHolder fHolder = (ViewHolder) rowView.getTag();
if(mListItems.get(position).getBeerName() != null)
fHolder.tvTitle.setText(mListItems.get(position).getBeerName());
if(mListItems.get(position).getBrewery() != null)
fHolder.tvBrewery.setText(mListItems.get(position).getBrewery());
return rowView;
}
如您所见,布局层次结构非常简单 - 三个 TextView 合而为一 RelativeLayout。
【问题讨论】:
-
使用 Traceview 确定您的时间都花在了哪里。
-
@CommonsWare 我认识的第一个方法排在第 16 位,
Incl Cpu Time5475,931(或 72%)。我应该提供所有结果的屏幕吗?
标签: android performance listview android-listview