自定义博客皮肤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)
  • 资源 (1)
  • 收藏
  • 关注

原创 hashmap常见问题

注:这行源码的主要含义是把哈希码按位异或哈希码右移 16 位的操作,让高位与低位混合,可以更好地分散元素在哈希表中的位置,减少哈希冲突的发生。2、使用哈希值与哈希表的容量进行与操作 (hash & (table.length-1)),得到元素在哈希表中的位置,即索引。如果存在链表或红黑树,则遍历链表或红黑树,逐个比较键的值,找到与要查询的键相等的元素,并返回对应的值。如果仅有一个元素,则判断该元素的键是否与要查询的键相等。3、在该索引位置上,如果没有任何元素,则说明哈希表中不存在该键对应的元素,查询失败。

2024-04-16 15:53:37 287

原创 java 面试锁

synchronized 是JVM层面的锁,是Java关键字,通过monitor对象来完成(monitorenter与monitorexit),对象只有在同步块或同步方法中才能调用wait/notify方法,ReentrantLock 是从jdk1.5以来(java.util.concurrent.locks.Lock)提供的API层面的锁。公平锁是指多个线程同时尝试获取同一把锁时,获取锁的顺序按照线程达到的顺序,而非公平锁则允许线程“插队”。可中断锁是指线程尝试获取锁的过程中,是否可以响应中断。

2024-04-16 15:49:15 901

原创 Android性能优化

冷启动优化在application中可以的都放子线程加载,但是又要处理好多进程oncreate()方法多次执行初始化的问题。

2024-04-16 14:22:39 242

原创 Hanlder内存泄漏时谁是GCroot

Handler持有Activity,Message又持有Handler的引用。总结一下引用关系:ThreadLocal.ThreadLocalMap——>Entry(WeakReference)——>static Looper sMainLooper(GcRoot)——>MessageQueue——>Message——>Handler——>Activity。回答这个问题前我们要知道什么是内存泄漏,内存泄漏是指本该被GC的对象因为某种原因而没有被回收,造成内存得不到释放。Handler的内存泄漏原因。

2024-04-16 12:54:31 210

原创 项目的架构

posts/feeds(功能模块) -->Component:BusiLib(各个模块的一些公用组件比如view/constants小红点管理器等/包括各个模块自己的event/model/view) --> commoncore(极验,哆啦A梦,小米登陆,debug配置) --->baseLibrary:commonsdk/baseLibrary:mediaengine/commonservice。Component --- 业务基础组件库,比如app风格的统一弹窗,统一的歌词渲染控件,通知管理等等。

2024-04-16 00:16:53 366

原创 Arouter复习

Arouter使用annotationProcessor用来声明注解解析器,arouter-compiler用来解析ARouter中的各个注解并自动生成class类其生成的5个索引文件有4大类(Group类有2个文件,按Group区分开了),他们都实现了ARouter中的接口:ARouter初始化追进去哦,_ARouter在init初始化方法里除了初始化一些变量和一个handler,又调用了, 其中executor是一个线程池, 继续跟到方法比较长,上面只保留了核心代码,ARouter优先使用。

2024-04-15 17:42:25 861

原创 用Build模式对扫码页进行重构

使用builder设计模式完美的解决了方法一和方法二的不足,并且兼具他们的优点:具有必填属性和可选属性的区分,更重要的是:可读性很强。④ZXingScanJumpModuleBuilder的属性中只给必须的属性添加了final修饰,所以必须在ZXingScanJumpModuleBuilder的构造方法中初始化它们。由于业务的发展,很多业务都需要扫码才能进入,这样扫码页的入口就越来越多,不同的业务需要不同的参数,跳转的时候一个传递的参数写错了,就可能导致跳转失败,考虑这块重构.优点:使用灵活,易于扩展;

2024-04-15 14:47:47 263

原创 地图主页的策略模式

在这里context就是MainMapViewActivity, 公共接口就是MapStrategy,可以在MainMapViewActivity运行的时候动态替换各个MapStrategy的实现类,达到解耦的效果.复合设计原则 对现有代码进行扩展而不是修改,开闭原则(Open Close Principle) 开闭原则的意思是:对扩展开放,对修改关闭,如果以后增加业务,只需要增加一个MapStrategy的实现类即可,而本身MainMapViewActivity不需要做修改.

2024-04-15 14:15:00 194

原创 地图定位上报模块的实现

上报的时候调用mergeWith(mergeWith 操作符可以将两个流合并成一个流,合并的方式是将两个流中的元素交替地放入到合并后的流中。缓存定义了一个缓存的策略 EventCacheStrategy,是一个接口,由 mmkv 或者SharedPreferencesCache来实现.如果是强制上报,就直接上报一个list,不存本地,如果不是强制上报,则添加到缓存里面.进入app主页的时候判断有没超过4兆,超过4兆就清理,超过有效期也清理。如果不是强制上报 则在进入主页,欢迎页,切换到后台的时候上报,

2024-04-15 13:13:53 173

原创 Android 消息机制之消息类型及同步屏障

不断遍历消息队列,直到找到屏障消息,退出循环的条件有两个,一是p.target == null,说明是屏障消息,二是p.arg1 == token,也说明p是屏障消息,因为在屏障消息入队的时候设置过msg.arg1 = token。总结一下,ViewRootImpl在处理UI事件之前,先发送一个屏障消息,告诉handler优先处理异步消息,然后Choreographer发送异步消息,异步消息处理完以后,然后再发送一个移除异步屏障的消息。①屏障消息和普通消息的区别在于屏障消息没有tartget属性。

2024-04-12 01:47:57 1098

原创 Android消息机制

返回的message在Looper的loop()方法里后面执行了msg.target.dispatchMessage(msg),而Message的 target就是传入的Hander,我们去看看handler的dispatchMessage()可以看到 先执行的是message的callback,如果没有执行 handler的callback如果也没有执行handleMessage(),这个就是我们经常处理消息的方法了,到这里消息机制的基本流程就梳理完了,你学会了吗?我们去看看queue.next();

2024-04-02 16:22:14 241 1

原创 gaga

gaga

2014-11-24 18:55:29 277

volley.jar.zip

volley的源码Jar包,导入即可使用

2013-11-27

空空如也

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

TA关注的人

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