自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 优秀文章

1.hashmap相关1:https://mp.weixin.qq.com/s/rxkAiLpc21x1pkIgCgyLNg

2020-04-26 10:50:03 144

原创 常用编译tips

常用编译tips1.INSTALL_FAILED_TEST_ONLY2.jcenter仓库慢1.INSTALL_FAILED_TEST_ONLY在项目中的gradle.properties中设置:android.injected.testOnly=false2.jcenter仓库慢替换成阿里云buildscript { repositories { googl...

2020-03-31 14:16:35 151

原创 RxJava在网络请求中的应用

利用RxJava实现串行请求class Serial { class Student constructor(var id: Int) { } fun request1(): Observable<Student> { return Observable.just(Student(123)) } fun request2(i...

2019-09-23 14:43:51 199

原创 Git常用命令

删除本地所有更改git checkout -fgit reset --hardgit clean -xdf

2019-09-23 09:08:58 103

原创 第一个gradle插件

建立插件首先新建立一个空工程,如下图之后再新建一个module,Android Studio->File->New->New Module,在弹出的对话框中选择java module我们用groovy编写gradle plugin,所以把java目录删掉之后分两部分1:main目录下新建groovy目录,在groovy目录下新建包如com.netease.lib...

2019-09-10 18:03:27 95

原创 SurfaceView

SurfaceSurface继承于Parcelable,内部拥有一系列native方法和一个canvasprivate final Canvas mCanvas = new CompatibleCanvas();private Matrix mCompatibleMatrixCompatibleCanvas是Surface的内部类,主要包装了Canvas的Matrix方法Surface...

2019-08-28 17:28:11 193

原创 blockcanary源码

blockcanary项目名称AndroidPerformanceMonitor,内含4个模块1 blockcanary-android-no-op2 blockcanary-analyzer3 blockcanary-android4 blockcanary-sample本篇文章主要分析blockcanary-analyzer和blockcanary-androidBlockCana...

2019-08-16 09:24:03 221

原创 ServiceManager源码流程

ServiceManager启动于单独的进程,要早于zygote启动,启动时首先运行到service_manager.c的main函数,对binder进行初始化并进入binderloopint main(int argc, char **argv){ bs = binder_open(128*1024); binder_become_context_manager(bs); binde...

2019-08-14 21:12:21 481

原创 SystemServer启动流程

SystemServer被zygote启动后会运行到main函数,在这里面直接运行到run方法 public static void main(String[] args) { new SystemServer().run(); }在run方法中,会做一些初始化,之后启动其他服务,最终进入Loop循环private void run() { Looper.p...

2019-08-13 21:22:57 297

原创 Zygote源码分析

Android启动从init.rc开始,最开始启动ServiceManagerservice servicemanager /system/bin/servicemanager class core user system group system critical onrestart restart healthd onrestart resta...

2019-08-12 21:34:48 419

原创 七层网络模型与UDP

七层网络模型常用端口FTP(文件传输协议): TCP 20 21SSH(安全shell协议): TCP 22telnet(远程登录协议):TCP 23DNS(域名解析系统):UDP 53HTTP(超文本传输协议):TCP 80SMTP(简单邮件传输协议):TCP 25POP3(邮局协议3代):TCP 110HTTPS:TCP 443UDP无连接数据包括源端口和目的...

2019-08-12 20:08:25 204

原创 线程池源码

ExecutorsExecutors是concurrent包下的工具类,通过静态方法产生各种线程池产生固定线程数量的线程池 public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, ...

2019-08-11 18:54:29 85

原创 AQS和CAS

CASConmpare And Swap,它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。 这是作为单个原子操作完成的。java中的Atomic包内部包含Unsafe类,Unsafe(C++)类内部实现原理就是CASABACAS可以解决并发问题,但是如果1,2连个线程同时操作数据x,1将x修改为y,再次修改成x,此时2对x进行更新此时2线程可以...

2019-08-11 16:38:31 909

原创 原子性

原子性原子性是指一个操作不可中断,要么完全成功,要么失败Atomic包,竞争激烈,性能好,但只能维持一个值synchrinized,不可中断,适合竞争不激烈的环境Lock,可中断,竞争激烈Atomic内部包含一个用volatile修饰的变量private volatile int value;实际操作的是unsafe类private static final Unsafe ...

2019-08-11 15:08:05 111

原创 重排序与volatile

重排序为了提高编译器和处理器的能力,对代码编译执行顺序进行修改// a和b没有依赖关系,编译时可能会是b先执行在执行aint a = 1int b = 2 // 下面由于b依赖于a,所以不会进行重排序int a = 1int b = a + 1volatile当一个线程对共享变量进行修改,其他线程可以立即知道新的共享变量的值,防止重排序每次使用时立即从主内存刷新read,...

2019-08-11 14:17:43 103

原创 class,dex,Dalvik,ART

Class文件基本信息class文件的作用是记住类的所有信息8位字节对齐每个类和接口单独占一个class文件缺点内存占用大堆栈加载方式,加载速度慢文件IO多,类查找慢Dex文件记住整个工程所有类文件信息8字节对齐整个应用所有java文件放在一个dex文件中分为文件头,索引区,数据区Dalvik虚拟机执行文件为dex基于寄存器(JVM基于栈)运行时将字...

2019-08-11 13:46:50 82

原创 classloader源码

DexClassLoaderDexClassLoader继承于BaseDexClassLoader,可以加载自定义目录下的Dex文件,内部只有一个方法 public DexClassLoader(String dexPath, String optimizedDirectory, String libraryPath,ClassLoader parent) { super(dexPa...

2019-08-09 20:57:08 277

原创 classloader概览

虚拟机根据类名加载二进制流的过程是由类加载器实现的,也就是classloader,java提供了三种classloaderBootStripClassLoader:加载jre/lib/rt.jarExtensionClassLoader:加载jre/lib/ext/*.jarAppClassLoader:加载CLASS_PATH目录下和应用程序类的加载采用双亲委派机制appcla...

2019-08-09 20:09:17 135

原创 类在虚拟机中的加载流程

加载-》连接(验证-》准备-》解析)-》初始化1)加载:通过类的全名获取类的二进制流,将类的数据结构转化为方法区的结构,在内存中生成一个代表这个类的class对象2)连接:验证:确保class信息正确无害准备:在方法区初始化变量的初始值,对象为nullstatic int a =1 (初始化为0)static final int a = 10 (初始化为10)解析:将类的符号引用转...

2019-08-09 18:53:58 323

原创 IntentService源码

IntentService继承自Service,在onCreate方法中创建HandlerThread并启动线程,利用HandlerThread在子线程中的Looper生成一个在子线程中工作的ServiceHandler HandlerThread thread = new HandlerThread("IntentService[" + mName + "]"); thread.sta...

2019-08-08 21:14:18 240

原创 HandlerThread源码

HandlerThread继承于线程,内部包含一个Looper,Looper在run方法中初始化并进入Loop循环public void run() { mTid = Process.myTid(); Looper.prepare(); Looper.loop();}外部使用时,利用这个Looper生成Handler,这样这个Handler的dispatchmessage方法就...

2019-08-08 20:58:34 484

原创 垃圾回收算法

判定对象为垃圾对象的方法引用计数法对象每被引用一次,计数器加1,每减少一个引用,计数器减1,当计数器为0,可视为垃圾对象,可以被GC掉可达性分析从虚拟机栈,本地方法栈,方法区出发遍历整个堆区,处于连通区的对象是不可回收的,不处于连通区的是可以GC的对象回收策略标记清除算法分为两个过程,首先标记出可清除的区域,之后进行清除,缺点产生大量内存碎片复制算法将内存分为...

2019-08-08 20:44:41 109

原创 kotlin内部类

内部类:默认静态内部类,用inner修饰为非静态内部类class InnerClass{ // 默认静态 class SubClass{} // 加inner修饰变为非静态 inner class InnerSubClass{}}fun main(args:ArrayList<String>){ // 静态可以直接new ...

2019-08-08 18:59:18 1158

原创 kotlin属性代理

属性代理是指属性完全被代理类来实现,var的代理类需要实现setValue和getValue,而val的代理类只需要getValue方法即可var i:Int by IntDelegate()val j:Int by ValIntDelegate()class IntDelegate{ operator fun getValue(thisRef: Any?, property: K...

2019-08-08 18:32:19 203

原创 kotlin扩展方法

扩展方法是指不改变类的源码的情况下为类增加自定义的方法fun String.times(times: Int): String { var builder = StringBuilder() for (i in 0 until times) { // 这里的this只得调用者本身 builder.append(this) } ret...

2019-08-08 18:08:53 1125

原创 kotlin可见性关键字

在kotlin文件中修饰方法,默认为public,不能用protectedprivate fun test1() {}internal fun test3() {}// public 为默认public fun test4() {}// protected会报错protected fun test2() {}fun main(args:ArrayList<String>...

2019-08-08 17:46:33 661

原创 ThreadLocal源码

threadlocal机制的实现与thread和threadlocalmap密不可分ThreadLocalMapThreadLocalMap是ThreadLocal的静态内部类,内部由数组实现,默认大小16private static final int INITIAL_CAPACITY = 16;private Entry[] table;Entry继承自WeakReferenc...

2019-08-07 18:47:02 77

原创 ArrayList源码

ArrayList内部由数组构成,初始容量0private static final int DEFAULT_CAPACITY = 10;private static final Object[] EMPTY_ELEMENTDATA = {};private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};trans...

2019-08-06 21:24:34 123

原创 Vector源码

Vectorvector内部由数组构成 protected Object[] elementData; protected int elementCount; protected int capacityIncrement;默认大小为10public Vector() { this(10);}内部采用数组拷贝elementData = Arrays....

2019-08-06 21:08:50 79

原创 Java内存模型

概述java虚拟机分为线程共享区和线程私有区,共享区包括堆,方法区,私有区域包括程序计数器,虚拟机栈,本地方法栈,共享区是所有线程共享,私有区是每个线程独自拥有,java内存模型可以理解成一套规则,这套规则规定了私有区和共享区之间如何进行数据交互,保证数据正确交互八种操作锁定作用于主内存,把主内存的变量标记为某个线程独享读取把主内存中的变量读取出来载入把读取的变量存放到工作...

2019-08-06 20:25:15 76

原创 虚拟机内存

线程共享区包括堆和方法区堆 存放对象的区域 垃圾收集器工作区域 分为新生代,老年代方法区 常量 静态变量 编译后的代码线程私有区包括虚拟机栈,本地方法栈,程序计数器虚拟机栈 栈帧:一个方法拥有一个栈帧,每调用一个方法,就将栈帧压入栈,方法执行完成出栈。栈帧中存储局部变量表,操作数栈,方法出口等本地方法栈 为native方法服务程序计数器类似于指针,记录jav...

2019-08-06 20:04:45 152

原创 具名参数,默认参数,可变参数

class TestObj { /** * 变长参数可以写在任何位置,前中后 * 一个函数只能有一个变长参数 * */ fun test1(data1: Int, vararg data2: String, data3: Int) {} fun test2(vararg data1: Int, data2: String, data3: Int...

2019-08-06 18:29:25 661

原创 if表达式和for循环

fun test(): Unit { /** * if 表达式可以直接将结果返回给变量 * */ var x = 2; var result = if(x%2==0) "偶数" else "奇数" /** * 循环可以加标签,通过@定位标签 ...

2019-08-06 18:15:50 185

原创 变量var和常量val以及懒加载

// const 声明的在编译时就已知道值,类似C中的宏// const 修饰的可以写在类的最外层,或者companion object中const val constStr:String = "134"class TestObj{ companion object{ const val constStr2:String = "134" } // ...

2019-08-06 18:02:51 250

原创 ==和===

/** * == 比较内容 * === 比较内容+地址 * */ fun testEqus() { var src1:Int = 134 var src2:Int = 134 // true Log.d("test", (src1 == src2).toString()) // t...

2019-08-05 21:00:56 71

原创 is关键字用法

open class Parent { fun hello():Boolean { return true }}class Son : Parent() {}fun main(arrayList: Array<String>) { var parent: Parent = Son() if (parent is Pare...

2019-08-05 20:15:28 715

原创 as关键字使用

open class Parent{}class Son:Parent(){}fun main(arrayList: Array<String>) { var parent:Parent = Son() // 失败 抛出异常 var son:Son = parent as Son // 失败 返回为空 var ...

2019-08-05 20:07:10 562

原创 Kotlin回调写法

接口声明public interface CallBack { void onCallBack();}Java回调写法public class TestJava { public void setCallBack(CallBack callBack) { } public void test() { setCallBack(new Ca...

2019-06-28 15:31:18 3016

原创 Kotlin判空

Java判空public class TestJava { public void test(String data) { if (data != null) { Log.d("TestJava", "TestJava"); } } public void testArray(ArrayList<String...

2019-06-28 15:14:51 898

原创 Kotlin单例写法

Java 单例的写法public class Single { private static Single sInstance = null; private Single() { } public static Single getInstance() { if (sInstance == null) { sInst...

2019-06-28 14:59:20 620

空空如也

空空如也

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

TA关注的人

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