2022年6月14日
摘要:
@synchronized支持多线程递归调用,接下来我们来看一下@synchronized的底层实现。 一、@synchronized的源码入口 id _sync_obj = (id)obj1; objc_sync_enter(_sync_obj); struct _SYNC_EXIT { _SYN
阅读全文
posted @ 2022-06-14 21:58
suanningmeng98
阅读(615)
推荐(0)
2022年6月8日
摘要:
一、什么是SharedPreferences SharedPreferences一个轻量级的存储类,特别适合用于保存软件配置参数。(是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下);经常用于保存用户数据。 二、如何使用 //1.使
阅读全文
posted @ 2022-06-08 19:26
suanningmeng98
阅读(60)
推荐(0)
摘要:
一、bug问题描述 界面上只有两个框,用户名和密码,用户名框输入之后可点击done按钮收回,密码框输入后点击done按钮无效 二、已有代码 在点击不同的editText时会切换焦点事件 重写了onFocusChange方法对editText事件做出setActivated处理 用户名的xml中设置了
阅读全文
posted @ 2022-06-08 16:42
suanningmeng98
阅读(44)
推荐(0)
2022年6月4日
摘要:
一 、线程安全 1.1 什么是线程安全 线程操作共享数据的时候不会出现意想不到的结果就叫线程安全,否则,就是线程不安全 1.2 原子属性是一定是线程安全的? 原子属性只能保障 set 或者 get的读写安全,但我们在使用属性的时候,往往既有set又有get,所以说原子属性并不是线程安全的。 二、 i
阅读全文
posted @ 2022-06-04 11:21
suanningmeng98
阅读(237)
推荐(0)
2022年6月3日
摘要:
一、单例 1.1 单例示例 static dispatch_once_t onceToken; dispatch_once(onceToken, ^{ <#code#> }); 1.2 如何使用 参考链接:https://juejin.cn/post/7103015785685057572#head
阅读全文
posted @ 2022-06-03 20:23
suanningmeng98
阅读(454)
推荐(0)
摘要:
一 死锁 1.1 死锁产生的原因 我们根据死锁的提示:__dispatch_wait_for_queue查找到GCD源码中死锁的源码: 我们查找其中关于_dq_state_drain_locked_by的函数调用: 由此,我们可以知道,当线程和队列相同时就会发生死锁。 1.2 死锁实例 //1 //
阅读全文
posted @ 2022-06-03 16:06
suanningmeng98
阅读(276)
推荐(0)
摘要:
一、进程和线程 1.1 什么是进程和线程 进程是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存空间内 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行,进程要想执行任务,必须得有线程,进程至少要有一条线程。程序启动会默认开启一条线程,这条线程
阅读全文
posted @ 2022-06-03 10:57
suanningmeng98
阅读(310)
推荐(0)
2022年5月26日
摘要:
一、常用语句 //打开或者创建数据库 openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory) //插入一条数据 insert(String table,String nullColumnHack,ContentVa
阅读全文
posted @ 2022-05-26 19:44
suanningmeng98
阅读(28)
推荐(0)
摘要:
一、获取基本步骤 1.获取传感器服务 2.获取待监听的传感器 3.注册传感器的监听器 4.注销传感器的监听器 二、代码实现 1.获取传感器服务 SensorManage来管理安卓的传感器服务 SensorManager sensorManager = (SensorManager)getSystem
阅读全文
posted @ 2022-05-26 17:25
suanningmeng98
阅读(737)
推荐(0)
摘要:
一、加载不完全的代码原始代码 Glide.with(context).load(pic).into(holder.imageView); 二、添加占位符后 //添加占位符 RequestOptions requestOptions = new RequestOptions() .placeholde
阅读全文
posted @ 2022-05-26 16:28
suanningmeng98
阅读(1662)
推荐(0)