自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 注解和反射

注解和泛型擦除后还能获取的原因

2022-04-20 21:02:00 1815

原创 Handler相关问题

1.一个线程有多少个Handler一个线程可以有无数个Handler,直接new出来就行2.一个线程有几个Looper,如果保证?一个线程只有一个Looper,原因是:// 1.构造方法私有化private Looper(boolean quitAllowed) { mQueue = new MessageQueue(quitAllowed); mThread = Thread.currentThread(); } *****// 2.prep

2022-04-04 10:03:29 525

原创 LeakCanary源码分析

**原理:watch(监视)一个即将要销毁的对象**为什么产生内存泄露?1.当一个对象已经不需要再使用了,有一个正在使用的对象持有了这个对象的引用2.有些对象只有有限的生命周期内存泄漏会导致什么问题?1.OOM3.内存泄漏的场景单例导致内存泄漏非静态内部类创建静态实例 (非静态内部类会持有外部内的引用)内部类虽然和外部类写在同一个文件中, 但是编译完成后, 还是生成各自的class文件,内部类通过this访问外部类的成员。1 编译器自动为内部类添加一个成员变量, 这个成员变量的类型

2022-03-23 22:18:30 87

原创 EventBus源码解析

1.通过单例和构建者模式进行构建,对数据进行保存public static EventBus getDefault() { EventBus instance = defaultInstance; if (instance == null) { synchronized (EventBus.class) { instance = EventBus.defaultInstance; if

2022-03-23 20:20:16 234

原创 HashMap的初始容量为16,扩容为何是2的次幂

HashMap的hash的作用首先要了解HashMap的hash实现过程,hash方法的功能是根据key来定位K-V在链表数组中的位置的,也就是hash方法的输入应该是个Object类型的key(注意:如果key传入的是基本数据类型会被转换为其包装类),输出应该是个int类型的数组下标。常规思路是通过key的hashCode对HashMap的容量进行取模就可以了,但是考虑到效率的问题HashMap的hash方法实现还是有一定复杂的。hash的实现具体实现上由两个方法int hash(Object)

2022-03-16 13:55:20 1037

原创 线程、并发、线程协作

CAS的原理(compare and swap)利用了现代处理器都支持CAS的指令,循环这个指令,直到成功为止

2021-05-10 21:03:09 96

原创 ThreadLocal

1.What?ThreadLocal,可以理解为线程本地变量。它为T类型的变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量,线程之间读写对象的操作是相互隔离、互不影响的,也就是不同线程的ThreadLocal之间是不可共享的。/**下面是调用ThreadLocal的set方法,我们可以清晰的看到每次都会获取当前线程对象*/public void set(T var1) { Thread var2 = Thread.currentThread();

2021-05-10 10:31:40 74

原创 泛型

泛型?泛型是一种参数化的变量,Java的泛型是一种伪泛型,c语言的模板函数和c#的泛型才是真的泛型,其中c语言的模板函数是通过替换实现的。Java在编译的时候会进行类型的擦除,但是会进行singature标记,通过singature标记后是可以通过反射获取到真实泛型的。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。JVM并不知道泛型的存在,因为泛型在编译阶段就已经被处理成普通的类和方法;处理机制是通过类型擦除,擦除规则:若泛型类型没有指定具体类型,用O

2021-05-09 07:49:27 75 1

原创 ViewPager+Fragment懒加载机制的源码解析

什么是懒加载?Fragment+ViewPager中,由于ViewPager会预加载当前可见的Fragment的左右两侧的Fragment,这样就会导致左右两侧的Fragment即使处于不可见状态也会通过网络拉取数据加载,造成多余的流量损失和性能损失,如果两侧的Fragment存在大量的图片等消耗内存的控件时严重会出现界面滑动卡顿和OOM,懒加载就是解决上述问题产生的,当且仅当Fragment处于可见状态时才开始加载数据,否则停止加载数据。1.Fragment的预加载在日常开发中不可避免的需要使用Fra

2020-08-25 15:46:50 186

原创 Androidstuio有关导如项目作为依赖以及出现包冲突的解决办法

首先是把项目拷贝到桌面上,然后按照上图的方法倒入到相应的AndroidStudio项目里面去。这个时候运行时往往会出现如下异常: 这个异常是由于添加的依赖项目里面有了Support——v4的包,我自己原本的项目里面也有这个包,在Androidstudio里面的依赖包是具有唯一性的,所以要把自己项目里面的support-v4去掉。 但是,有时候自己是找不到的,如下图: 可以看到以来里面是

2017-02-20 16:53:24 1442

原创 微信小程序跳坑

1.出现脚本错误或者未正确调用Page({}) 出现这个问题是原因是没有在相应页面的JS文件中调用Page(),或者平时开发的时候脚本编写出现错误。就算是新建的文件你也需要在JS文件中加上Page({}); 即使里面是空的也要创建出Page({})方法

2017-02-16 14:29:10 191

原创 项目打包上架

本文将阐述项目打包到上架的过程。 首先,项目打包 Build—>Generate Signed APK—>Next—>Finish 打包APK其实有两种方式,这里选择的是用下面这个,这样是为了给APK签名 这里的Key store path选择的是签名文件,下面的内容应该与build.gradle文件里面的签名信息一致。 这里选择release,debug会将相应的调试日志也打印出来。

2017-02-10 14:42:15 286

原创 IO流总结

File用来封装路径,可以是文件路径,也可以是目录路径,也可以是不存在的路径。 File创建对象有两种方式: 1.File f = new File(“d:\acb\a.txt”); 2.File f = new File(“d:\acb\”,”a.txt”);File有很多方法,文件和目录的属性: eg:canRead() acnWrite() canExexute() i

2017-02-09 17:50:04 150

空空如也

空空如也

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

TA关注的人

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