- 博客(12)
- 资源 (2)
- 收藏
- 关注
原创 MMKV与SharedPreference的比较(三)
SharedPreferences 使用 xml 格式为 Android 应用提供一种永久数据存贮方式,xml文件位置一般都在/data/data/包名/shared_prefs目录下,并且使用键值对的方式来存储数据的。虚拟内存被操作系统划分成两块:用户空间和内核空间,用户空间是用户程序代码运行的地方,内核空间是内核代码运行的地方。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。可见,将数据写入文件需要将数据拷贝两次,再写入到文件中,如果数据量过大,也会有很大的性能损耗。
2023-03-28 16:57:12 325 1
原创 MMKV for Android 多进程设计与实现(二)
例如,说到进程锁第一个想到的就是 pthread 库的 pthread_mutex,创建于共享内存的 pthread_mutex 是可以用作进程锁的,然而 Android 版的 pthread_mutex 并不保证。这些新的键值都 append 在原有写指针后面,可能跟前面的 key 重复,也可能是全新的 key,而原写指针前面的键值都是有效的。对于文件锁来说,前者是满足的,后者则不然。正如前文所述,发生内存增长的时候,必然已经先发生了内存重整,那么原写指针前面的键值也是统统失效,处理逻辑跟内存重整一样。
2023-03-28 15:01:51 475
原创 MMKV原理(一)
MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化 / 反序列化使用 protobuf 实现,性能高,稳定性强。将 MMKV 和 SharedPreferences、SQLite 进行对比, 重复读写操作 1k 次。
2023-03-28 14:53:11 209
原创 AsyncTask的工作原理
在1.6之前,AsyncTask是串行执行任务的,1.6的时候AsyncTask开始采用线程池里处理并行任务,但是从3.0开始,为了避免AsyncTask所带来的并发错误,AsyncTask又采用一个线程来串行执行任务。 具体执行流程,通过源码来分析:public AsyncTask() { mWorker = new WorkerRunnable<Params, Re...
2018-06-27 21:45:48 292
原创 Android中的线程和线程池
前言线程在Android中是一个很重要的概念,从用途上来说,线程分为主线程和子线程,主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时操作。由于Android的特性,如果在主线程中执行耗时操作,那么就会导致线程无法及时地响应,因此耗时操作必须放在子线程中去执行。 在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制地产生,并且线程的创建和销毁...
2018-05-26 15:24:58 237
原创 java中double类型数据加减操作精度丢失问题及解决方法
double类型数据加减操作精度丢失问题今天在项目中用到double类型数据加减运算时,遇到了一个奇怪的问题,比如1+20.2+300.03,理论上结果应该是321.23,其实结果并不是这样。public double add() { double number1 = 1; double number2 = 20.2; double number3 =
2017-10-19 17:31:01 38641 7
原创 Java垃圾回收机制(3)- GC算法
Java中,GC的对象主要是堆空间和永久区,很多人都认为Java的GC使用的是引用计数法,其实这是错误的,Java可以说从来都没有用过这个引用计数算法 !这是一个非常古老的算法了。引用计数法,它的一个基本思想对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。就可以回收了。如图有一个根对象,和一
2017-09-01 21:34:45 286
原创 Java垃圾回收机制(2)- Java的内存分布
Java的内存分布在JVM中,内存是按照分代进行组织的。 其中,堆内存分为年轻代和年老代,非堆内存主要是Permanent(永久代)区域,主要用于存储一些类的元数据,常量池等信息。而年轻代又分为两种,一种是Eden区域,另外一种是两个大小对等的Survivor区域。之所以将Java内存按照分代进行组织,主要是基于这样一个“弱假设” - 大多数对象都在年轻时候死亡。同时,将内存按照分代进行组织,使得
2017-09-01 21:05:08 328
原创 Java垃圾回收机制(1)- GC的工作原理
一、GC机制的介绍GC(Garbage Collection 垃圾回收)机制,是Java与C++/C的主要区别之一。Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的
2017-09-01 20:35:31 605
原创 Service、IntentService、Thread的区别和联系
一、Service的介绍Service的官方介绍中比较重要的两点:1. A Service is not a separate process. The Service object itself does not imply it is running in its own process; unless otherwise specified, it runs in the same proce
2017-08-27 15:54:23 1545
转载 Android系统架构
Android体系结构介绍Android是一个移动设备的开发平台,其软件层次结构包括操作系统(OS)、中间件(MiddleWare)和应用程序(Application)。根据Android的软件框图,其软件层次结构自下而上分为以下4层。 操作系统层(OS) 各种库(Libraries)和Android 运行环境(RunTime) 应用程序框架(Applica
2016-03-05 16:30:17 511
转载 解决由Handler引发的内存泄漏
在使用Handler更新UI的时候,Android Lint 给出了警告:This Handler class should be static or leaks might occur,意思是说:这个Handler 必须是static的,否则就会引发内存泄露。这种情况该如何解决呢?
2016-03-05 09:54:20 331
MAC版梆梆加固助手
2018-06-12
mac版360加固助手
2018-06-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人