我读了android源代码的ManageApplications.java并注意到这个'synchronized(entry)',我想这里有必要吗?它是如何'有效地绑定数据'的?我认为更好地理解它可以解决我的一些奇怪的问题,提前谢谢你。
public View getView(int position, View convertView, ViewGroup parent) {
...
// ? Bind the data efficiently with the holder
ApplicationsState.AppEntry entry = mEntries.get(position);
synchronized (entry) {
holder.entry = entry;
if (entry.label != null) {
holder.appName.setText(entry.label);
}
}
mActive.remove(convertView);
mActive.add(convertView);
return convertView;
}
答案 0 :(得分:2)
您要从holder
entry
设置两个值。如果您不进行同步,则另一个线程可能会在getView()
被设置和holder.entry
被调用之间运行holder.appName.setText()
。这将导致糟糕的状态。