Android之线程安全的单例模式,Adapter注意事项之引用传值
线程安全的单例模式
单位模式一般写法如下:
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); }
转载于:https://www.cnblogs.com/lurenjiashuo/p/android-thread-safe-singleton-pattern.html
Android之线程安全的单例模式,Adapter注意事项之引用传值相关推荐
- C++实现线程安全的单例模式
C++实现线程安全的单例模式 1.单例模式 一个简单的单例模式很容易实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实 ...
- android异步线程未执行,关于多线程:当服务在后台运行时,Android异步任务无法正常运行(doInBackground未执行)...
我注意到有时Async任务无法正常运行,实际上它的doInBackground()方法没有被调用,这种情况主要发生在该活动在后台运行任何服务时. 例如,当音乐在带有服务的后台运行时,Async任务不会 ...
- android单例模式代码,设计模式(一):Android 源码中的单例模式
设计模式(一):Android 源码中的单例模式 2020-08-17 22:51 阅读数 57 <>什么是单例模式? 单例模式(Singleton) 是最常见也最简单的设计模式,它的目的 ...
- 【转】Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask
方法一:(java习惯,在android不推荐使用) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread( new Runnable() { ...
- java 静态内部类 线程安全问题_单例模式的七种写法, 面试题:线程安全的单例模式...
http://cantellow.iteye.com/blog/838473 http://meizhi.iteye.com/blog/537563 第一种(懒汉,线程不安全): Java代码 pu ...
- android 异步线程的使用
//从项目中取出的,android 异步线程的使用,去执行上传百度云图片, public class MyThreadsAddMember extends AsyncTask<Integer, ...
- android异步线程利用Handler将消息发送至UI线程
android UI线程安全 首先对于android而言,UI线程就是我们的主线程,在Android应用启动时,会自动创建一个线程,主线程负责UI的展示.UI事件消息的派发处理等等,因此主线程也叫做U ...
- Android UI线程和非UI线程
UI线程及Android的单线程模型原则 当应用启动,系统会创建一个主线程(main thread). 这个主线程负责向UI组件分发事件(包括绘制事件),也是在这个主线程里,你的应用和Android的 ...
- android 打印线程信息
今天,讲讲如何打印线程的id. 用语句: Android.os.Process //获取当前进程的方法 android.os.Process.getElapsedCpuTime():获 ...
最新文章
- “后 PC”时代,应用为王
- mysql monday event_MySQL获取日期周、月、天,生成序号
- 编程的智慧 意外在内网找到的资源
- SQLite大批量插入性能优化
- WinSCP实现Ubuntu与 Windows 文件共享方法
- Largevis算法
- 和华为云一起做件“伟大的事”,24万奖金等你来!
- Linux下高速缓存DNS的配置
- python如何使数据加行_如何使用 Python 插入行
- 杭电acm2028 Lowest Common Multiple Plus
- dos如何运行java_怎么用DOS命令运行java程序
- 达梦数据库角色、用户管理
- 动态网站加速,cdn义不容辞
- 语音变声器微信小程序源码/支持多种音效变声器小程序源码
- 【数学】一元函数积分学(宇哥笔记)
- 上层应用程序是如何访问到底层驱动程序的呢?
- XCTF-PWN welpwn
- 人工智能 2. 图像识别
- Xilinx原语的用法
- Android中使用通知