为什么在getView中需要同步,如果删除它会怎样?

时间:2013-11-19 07:54:05

标签: android synchronized

我读了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;
    }

1 个答案:

答案 0 :(得分:2)

您要从holder entry设置两个值。如果您不进行同步,则另一个线程可能会在getView()被设置和holder.entry被调用之间运行holder.appName.setText()。这将导致糟糕的状态。