自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

奋斗在坚持的路上

活着就该逢山开路,遇水架桥,生活,你给我压力,我还你奇迹!

  • 博客(12)
  • 资源 (2)
  • 收藏
  • 关注

原创 MMKV与SharedPreference的比较(三)

SharedPreferences 使用 xml 格式为 Android 应用提供一种永久数据存贮方式,xml文件位置一般都在/data/data/包名/shared_prefs目录下,并且使用键值对的方式来存储数据的。虚拟内存被操作系统划分成两块:用户空间和内核空间,用户空间是用户程序代码运行的地方,内核空间是内核代码运行的地方。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。可见,将数据写入文件需要将数据拷贝两次,再写入到文件中,如果数据量过大,也会有很大的性能损耗。

2023-03-28 16:57:12 250 1

原创 MMKV for Android 多进程设计与实现(二)

例如,说到进程锁第一个想到的就是 pthread 库的 pthread_mutex,创建于共享内存的 pthread_mutex 是可以用作进程锁的,然而 Android 版的 pthread_mutex 并不保证。这些新的键值都 append 在原有写指针后面,可能跟前面的 key 重复,也可能是全新的 key,而原写指针前面的键值都是有效的。对于文件锁来说,前者是满足的,后者则不然。正如前文所述,发生内存增长的时候,必然已经先发生了内存重整,那么原写指针前面的键值也是统统失效,处理逻辑跟内存重整一样。

2023-03-28 15:01:51 390

原创 MMKV原理(一)

MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化 / 反序列化使用 protobuf 实现,性能高,稳定性强。将 MMKV 和 SharedPreferences、SQLite 进行对比, 重复读写操作 1k 次。

2023-03-28 14:53:11 141

原创 AsyncTask的工作原理

在1.6之前,AsyncTask是串行执行任务的,1.6的时候AsyncTask开始采用线程池里处理并行任务,但是从3.0开始,为了避免AsyncTask所带来的并发错误,AsyncTask又采用一个线程来串行执行任务。 具体执行流程,通过源码来分析:public AsyncTask() { mWorker = new WorkerRunnable<Params, Re...

2018-06-27 21:45:48 233

原创 Android中的线程和线程池

前言线程在Android中是一个很重要的概念,从用途上来说,线程分为主线程和子线程,主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时操作。由于Android的特性,如果在主线程中执行耗时操作,那么就会导致线程无法及时地响应,因此耗时操作必须放在子线程中去执行。 在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制地产生,并且线程的创建和销毁...

2018-05-26 15:24:58 201

原创 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 37841 7

原创 Java垃圾回收机制(3)- GC算法

Java中,GC的对象主要是堆空间和永久区,很多人都认为Java的GC使用的是引用计数法,其实这是错误的,Java可以说从来都没有用过这个引用计数算法 !这是一个非常古老的算法了。引用计数法,它的一个基本思想对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。就可以回收了。如图有一个根对象,和一

2017-09-01 21:34:45 265

原创 Java垃圾回收机制(2)- Java的内存分布

Java的内存分布在JVM中,内存是按照分代进行组织的。 其中,堆内存分为年轻代和年老代,非堆内存主要是Permanent(永久代)区域,主要用于存储一些类的元数据,常量池等信息。而年轻代又分为两种,一种是Eden区域,另外一种是两个大小对等的Survivor区域。之所以将Java内存按照分代进行组织,主要是基于这样一个“弱假设” - 大多数对象都在年轻时候死亡。同时,将内存按照分代进行组织,使得

2017-09-01 21:05:08 300

原创 Java垃圾回收机制(1)- GC的工作原理

一、GC机制的介绍GC(Garbage Collection 垃圾回收)机制,是Java与C++/C的主要区别之一。Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的

2017-09-01 20:35:31 570

原创 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 1473

转载 Android系统架构

Android体系结构介绍Android是一个移动设备的开发平台,其软件层次结构包括操作系统(OS)、中间件(MiddleWare)和应用程序(Application)。根据Android的软件框图,其软件层次结构自下而上分为以下4层。    操作系统层(OS)    各种库(Libraries)和Android 运行环境(RunTime)    应用程序框架(Applica

2016-03-05 16:30:17 436

转载 解决由Handler引发的内存泄漏

在使用Handler更新UI的时候,Android Lint 给出了警告:This Handler class should be static or leaks might occur,意思是说:这个Handler 必须是static的,否则就会引发内存泄露。这种情况该如何解决呢?

2016-03-05 09:54:20 308

MAC版梆梆加固助手

MAC版梆梆加固助手是梆梆安全应用加固系统的 PC 端加固辅助工具,可以帮助客户实现“一 键加固 -> 自动下载 -> 自动打渠道包 -> 自动签名 -> 自动导出”的一站式加固服务体 验,是客户执行应用加固操作的必备助手。

2018-06-12

mac版360加固助手

加固保为移动应用提供专业安全的保护,可防止应用被逆向分析、反编译、 二次打包,防止嵌入各类病毒、广告等恶意代码,从源头保护数据安全和开发者 利益。360 加固助手可帮助应用实现“一键加固自动签名一键发布应用市场” 等多个操作。

2018-06-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除