码迷,mamicode.com
首页 > 移动开发 > 详细

Android之线程安全的单例模式,Adapter注意事项之引用传值

时间:2016-02-20 14:38:49      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

线程安全的单例模式
单位模式一般写法如下:

public static FestivalLab mInstance;
private FestivalLab() {
}
public static FestivalLab getInstance() {
    if (mInstance == null) {
        mInstance = new FestivalLab();
    }
    return mInstance;
}

这样写不是线程安全的,因为如果两个线程都进入到这里,会实例化两次。那么如何优化呢?

线程安全的单例模式:

public static FestivalLab mInstance;
private FestivalLab() {
}
public static FestivalLab getInstance() {
    if (mInstance == null) {
        synchronized (FestivalLab.class) {
            if (mInstance == null) {
                mInstance = new FestivalLab();
            }
        }
    }
    return mInstance;
}

这里用 synchronized 来进行锁定,同一时间只让一个线程进行实例化操作。

 

Adapter注意事项之引用传值
Adapter中经常会用到集合数据,先在Activity中获取集合数据,然后传给Adapter中构造适配器。
这里有一个特别需要注意的地方,就是java中集合数据是引用的方式传递的,如果在传给Adapter时数据不进行复制,在Activity中改变了集合数据(本意并不想改变Adapter中的数据),Adapter中的数据源也发生了变化,导致意想不到的错误(如索引越界)。

如果是这种情况,就要进行数据复制,示例如下:

private List<Festival> mFestivals = new ArrayList<>();
mFestivals.add(...);
public List<Festival> getFestivals() {
    return new ArrayList<>(mFestivals);
}

 

 

Android之线程安全的单例模式,Adapter注意事项之引用传值

标签:

原文地址:http://www.cnblogs.com/lurenjiashuo/p/android-thread-safe-singleton-pattern.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!