12 lin-0410

尚未进行身份认证

最痛苦的事情,不是失败了,而是我本可以...... 所以,如果目标还没去实现,不要感叹为时已晚,因为种一棵树最好的时间是十年前,其次是现在!

等级
TA的排名 1w+

MMKV的原理-如何实现跨进程(2)

接上一篇:https://blog.csdn.net/lin20044140410/article/details/104450727在mmkv的使用中,肯定是有多线程,多进程的同步问题,有同步问题就肯定会用到锁,所以先从mmkv中锁的使用说起,mmkv处理线程的同步使用了mutex互斥锁, 处理进程间的同步时使用了flock文件锁.以下锁的使用都是在native层.先看下互斥锁是怎么...

2020-02-24 21:32:37

腾讯开源组件MMKV的使用及原理(1)

https://github.com/Tencent/MMKV/blob/master/readme_cn.md在需要持久化保存key-value这样的键值对时,通常考虑使用的是SharedPreference,SP最终以xml文件的形式保存数据,并且是直接IO的方式读写数据,在使用中会概率性碰到ANR的问题,不管是使用异步的方法apply,还是阻塞式的commit提交数据,都看会因为IO的瓶...

2020-02-23 13:21:28

Android中减小apk大小的方式

减小APK空间的方式:一,矢量图,不会因为缩放而让图片质量下降,又可以减小apk的大小,但是有个限制,通常矢量图常应用于小图标,比如200*200以下的.除去美工给出,还可以从Android studio中直接使用默认的一些资源.用法是,在资源上点右键 ->新建 -> Vector assert,其中有很多预制的矢量图,标准的矢量图是<svg>为根节点的,and...

2020-02-14 10:21:56

ViewPager + Fragment的懒汉加载模式

ViewPager + Fragment的懒汉加载模式首先,说下viewpager的使用场景下为什么需要懒汉式加载.ViewPager本身是带有缓存机制的,对缓存页数的设置可以通过public void setOffscreenPageLimit(int limit) {}实现,但是这个函数的实现中,有默认缓存页数DEFAULT_OFFSCREEN_PAGES 值为1,就是说即使你调用...

2020-02-13 14:11:39

ViewPager中的高度属性设置后为什么不符合预期

分析一个Viewpager中设置高度属性wrap_content为什么不是预期的内容给大小,而是充满整个屏幕高度.截图:先说下简单的布局:<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

2020-02-11 16:08:37

Android中插件化实现的原理

分析下Android中插件化实现的原理这里的场景是通过Java层的Hook技术,实现Activity插件化,以api29为例,如果其他的api版本,需要根据具体代码做兼容.Hook技术,通常就是用反射,代理模式改变系统的调用流程,或者说拦截事件的传递,做一些特定的处理.这样就可以在应用进程,通过hook技术改变系统进程的执行流程.要实现Hook,就要先找到Hook的点,Hook点的选择...

2020-02-06 23:48:11

Android序列化Serializable,Parcelable接口的应用,及可能的坑

什么是序列化?简单说就是将数据结构或者对象,转换成可以存储或者传输的数据格式的一个过程,也即是把数据结构,对象转成二进制串的过程.序列化的是对象,确切说是对象中的变量,不是方法,不是类.为什么需要序列化?在操作系统底层,数据是以字节序列传递,所以如果要传递对象,就需要序列化,反序列化操作.所以,进程间通信,本地数据存储,网络数据传输都需要序列化的支持.序列化的实...

2020-02-05 15:23:02

嵌套View的滑动,及拦截冲突问题.

分析嵌套view滑动时为什么会有冲突,怎样解冲突这里的一个场景是:父View是一个可以左右滑动的界面(可以自定义ViewPage,模拟出冲突的情况,因为ViewPager已经处理了滑动冲突,所以如果不重写,模拟不出这里的场景),其子View是一个可以上下话的界面,比如是一个listView.抛开ims侧的事件处理逻辑,直接说应用侧.应用侧事件分发的起点从Activity开始.pu...

2020-02-04 00:03:19

Bitmap使用中的两级缓存,及内存重用

案例是测试Bitmap使用过程中,如何使用二级缓存,及重用bitmap的内存这里的二级缓存,一是内存缓存,而是磁盘缓存。代码中已加注释,所以可以直接看代码:一,首先是主Activity,其中会设置recyclerView的布局类型,适配器,设置磁盘缓存的路径。public class MainActivity extends AppCompatActivity { pri...

2020-01-21 20:16:25

BitMap内存占用

BitMap加载后,占用内存大小:width * height *每个像素占的字节数代码中获取bitmap占用内存大小的计算:public final int getByteCount() @Bitmap.java{ return getRowBytes() * getHeight();}其中的getRowBytes()调用的是native方法,具体在android源码...

2020-01-20 17:23:38

数据结构系列,红黑树

红黑树红黑树的底层数据结构就是一棵二叉查找树(自平衡的二叉查找树)二叉搜索树也叫二叉查找树,二叉排序树。每个结点不是红色,就是黑色 不可能有连在一起的红色结点,两个黑色结点连在一起是可以的。 根结点是黑色。 每个红色结点的两个子结点都是黑色,叶子结点都是黑色,红黑树的变换规则:改变颜色,红变黑,黑边红 左旋 右旋旋转和颜色变换规则:所有的插入的点...

2020-01-12 17:05:24

数据结构系列,二叉平衡树的构建

平衡二叉树平衡二叉树,首先要是一种二叉排序树,然后,其中每一个结点的左子树,右子树的高度差(左子树的高度 – 右子树的高度)至多等于1,二叉树的高度就是这棵树有几层。将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子BF,所有结点的平衡因子的值,只可能是-1, 0, 1。只要二叉树上有一个结点的平衡因子绝对值大于1,则该二叉树就是不平衡的。距离插入结点最近的,且平衡因子...

2020-01-12 14:19:21

数据结构系列,二叉排序树的结点删除、重排

二叉排序树又称二叉查找树,它或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值。 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。 它的左右子树,也分别为二叉排序树。构造一棵二叉排序树的目的,不是为了排序,而是为了提高查找、插入删除关键字的速度。二叉树的删除,需要保证一点,不能因为删除了结点,而让这棵树变得不满...

2020-01-11 16:16:26

Java字节码指令大全

常量入栈指令 指令码 操作码(助记符) 操作数 描述(栈指操作数栈) 0x01 aconst_null null值入栈。 0x02 iconst_m1 ...

2020-01-09 22:13:41

数据结构系列 二叉树的遍历(顺序存储)

https://blog.csdn.net/lin20044140410/article/details/89436835二叉树链式存储数据结构-树树是一种一对多的数据结构,是n(n>=0)个结点的有限集。N=0时为空树。在任意一棵非空树中:1,有且只有一个特定的称为根root的结点,2,当n>1时,其余结点可分为m (m>0)个互不相交的有限集T1,T2,,,,Tm,...

2020-01-08 13:39:27

动态代理设计模式,及实现原理

动态代理模式,前提还是代理模式,只是优化了静态代理的一些不足。比如,静态代理在一对一关系出现时,创建的代理对象较多,代码量也大,可维护性就会稍差,在一对多的代理关系出现是,可扩展性就更差了。而动态代理,就是在使用时,才去创建代理类和实例,这样就可以通过一个动态代理类解决创建多个静态代理的问题,更灵活了。当然动态代理的缺点也是有的,就是相比静态代理直接调用目标对象方法,动态代理效率会低,...

2020-01-07 18:53:16

Git使用教程

Git使用教程https://www.cnblogs.com/tugenhua0707/p/4050072.html廖雪峰:https://www.liaoxuefeng.com/wiki/896043488029600

2019-12-19 09:29:56

jetty基础,tutorial jenkov文档

api:http://wiki.eclipse.org/Jetty不错的技术网站https://www.ibm.com/developerworks/cn/java/j-lo-jetty/翻译篇:https://blog.csdn.net/jiangshanjianke/article/details/7680641Java NIO博客http://ifeve.c...

2019-11-14 14:24:38

模拟MotionEvent事件

这两天在做模块的单元测试,需要模拟触屏事件,手势操作,下面针对MotionEvent做下代码记录:下面的事件注入都会调用一个函数:Instrumentation mInstrumentation; public void sendPointerEvent(int action, Point point) { MotionEvent event = MotionE...

2019-10-31 18:52:24

android源码环境下编译fourthling.cling库的依赖问题

记录下,编译fourthline.cling静态库的依赖问题。1,因为需要在android的源码环境下调试依赖cling的投屏,需要将fourthline.cling编译为静态库。首先预制依赖的.jar文件,具体是LOCAL_STATIC_JAVA_LIBRARIES,include $(BUILD_STATIC_JAVA_LIBRARY)相关.mk文件的编写。2,然后,javax包的...

2019-09-27 20:53:37

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。