自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SDK -  (5) - ArrayMap

一、内部结构二、原理数据结构2个数组,一个存key的hash值 ,一个存key和value的值。Get操作 -> 通过key值得到hash值 -> 通过2分查找求出index (数据量大 效率降低原因之一) -> key = Arrays[2*index] value = Arrays[2*index +1] ...

2019-12-16 21:46:38 155

原创 SDK - (4) - AIDL

一、使用步骤1、创建AIDL文件 写提供服务的接口方法2、创建服务Service,覆盖Bind方法 返回bind对象。3、bindService获取Service代理对象参考:https://www.jianshu.com/p/467016b4487c二、支持的类型三、自定义object需满足下面2个条件1、实现Parcelable接口...

2019-12-16 21:41:44 201

原创 SDK -  (3) - Binder

一、Linux的IPC方式1、管道(Pipe)及有名管道(named pipe)2、信号(Signal)3、报文(Message)队列(消息队列)4、共享内存5、信号量(semaphore)6、套接字(Socket)二、BinderAndroid独有的跨进程通信方式,具备传输效率较高、安全性更高、稳定性更好等特点。1、传输效率较高 -> 传输过程数据...

2019-12-15 20:14:09 152

原创 三方 - (3) - Arouter

官方中文介绍:https://github.com/alibaba/ARouter/blob/master/README_CN.md一、基本使用1、添加依赖android { defaultConfig { javaCompileOptions { annotationProcessorOptions { ...

2019-12-06 22:40:22 172

原创 三方 - (10) - 热修复

一、热修复类别阿里系:阿里百川HotFix、DeXposed从底层二进制c语言入手 腾讯系:QQ空间的超级补丁、微信的Tinker (从java加载机制入手)二、类加载器类别 1. PathClassLoader:只能加载已经安装到Android系统中的apk文件(/data/app目录),是Android默认使用的类加载器。 2. DexClassLoader:可以...

2019-12-06 22:36:50 97

原创 三方 - (9) - 插件化

一、插件化需解决的问题1、插件dex加载问题通过反射拿到DexClassLoader,解析插件dex与宿主dex合并后,重新插入宿主DexPathList中。2、插件组件生命周期问题提前占坑注册代理组件, 在校验前保存真实跳转信息,利用代理组件通过系统校验, 校验后拦截h跳转,取出信息完成启动。3、插件之间资源id冲突问题重写Context的getAsset、g...

2019-12-06 22:35:04 77

原创 三方 - (11) -  组件化

一.组件化需解决的问题1、组件之间 - 通信问题 数据通信 - 接口下沉 界面 - Arouter 事件 - EventBus2、组件单独运行 - Application 和 module 切换 gradle自定...

2019-12-06 22:33:39 175

原创 Java基础(17)   - 不可变对象

一、存在的意义1、让并发编程变得更简单线程安全问题的根本原因在于:多个线程需要同时访问同一个共享资源。假如没有共享资源,那么多线程安全问题就自然解决了,Java中ThreadLocal机制就是采取的这种思想。2、消除副作用防止在其他地方修改了对象属性,导致结果未按预期运行。(String设计成Final的原因之一)3、减少容器类使用过程出错的概率当使用Has...

2019-12-06 22:19:25 120

原创 Java基础(20)  - JDK各版本特性

一、Java71、switch中可以使用字符串2、泛型的自动判断List<String> tempList = new ArrayList<>();3、自定义自动关闭类(实现AutoCloseable接口)只要实现该接口,在该类对象销毁时自动调用close方法,你可以在close方法关闭你想关闭的资源4、新增一些取环境信息的工具方法(System中的...

2019-12-04 22:21:18 248

原创 Java基础(19)  -  网络编程

BIO、NIO、AIO待补充~NIO vs IO之间的理念上面的区别(NIO将阻塞交给了后台线程执行)IO是面向流的,NIO是面向缓冲区的 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方; NIO则能前后移动流中的数据,因为是面向缓冲区的 IO流是阻塞的,NIO流是不阻塞的 Java IO的各种流是阻塞的。这意味着,当一个...

2019-12-04 22:20:49 73

原创 并发(2) - 锁分类

2种分类法一、一类8种1、乐观锁/悲观锁2、独享锁/共享锁3、互斥锁/读写锁4、可重入锁5、公平锁/非公平锁6、分段锁7、偏向锁/轻量级锁/重量级锁8、自旋锁参考:https://www.cnblogs.com/hustzzl/p/9343797.html二、一类有3类方法锁、对象锁、类锁。(方法锁也是对象锁的一种)1、对象锁对象锁...

2019-12-04 22:17:32 178

原创 并发(1) -  JMM

一、主存储器与工作存储器JMM 分为主存储器(main memory)和工作存储器(working memory)两种。主存储器(main memory)类的实例所存在的区域(堆),为所有线程共享。工作存储器(working memory)每个线程各自独立所拥有的作业区,在working memory中,存有main memory中的部分拷贝,称之为工作拷贝(wor...

2019-12-04 22:13:50 67

原创 并发(3) - 关键字

一、并发特性1、可见性a、 保证任何一个线程修改变量立即写入到主内存中(堆);b、 所有线程对该变量引用会强制立即失效,并且该线程必须去堆中获取最新的变量值。2、指令重排序代码的执行顺序 会在JVM中(编译器优化 指令级并行重排序 内存系统重排序 最终执行的指令序列)3、原子性同一时刻最多只有一个线程访问该段代码。二、Volatile->...

2019-12-03 20:28:45 90

原创 Java进阶(5)  -  JMM

一、主存储器与工作存储器JMM 分为主存储器(main memory)和工作存储器(working memory)两种。主存储器(main memory)类的实例所存在的区域(堆),为所有线程共享。工作存储器(working memory)每个线程各自独立所拥有的作业区,在working memory中,存有main memory中的部分拷贝,称之为工作拷贝(wor...

2019-12-03 20:25:45 70

原创 Java基础(18) - JVM

JVM由类加载器、运行时数据区、执行引擎3部分组成一、类加载器有启动类、扩展类、系统类、自定义4种类型加载器(1)启动类加载器 (Bootstrap ClassLoader )-> 它用来加载Java的核心库,比如String、System这些类-> JRE/lib/rt.jar(2)扩展类加载器(Ext ClassLoader由Java语言实现,父类加载器为...

2019-12-03 20:24:27 120

原创 Java基础(17) - 不可变对象

一、存在的意义1、让并发编程变得更简单线程安全问题的根本原因在于:多个线程需要同时访问同一个共享资源。假如没有共享资源,那么多线程安全问题就自然解决了,Java中ThreadLocal机制就是采取的这种思想。2、消除副作用防止在其他地方修改了对象属性,导致结果未按预期运行。(String设计成Final的原因之一)3、减少容器类使用过程出错的概率当使用Has...

2019-12-03 20:20:38 79

原创 Java基础(16) - Class类

一、存在的意义位于java.lang包下,和java.lang.reflect包下的类共同支持java反射功能jvm在类加载时,在堆中为每个类生成一个Class对象,用于记录每个类的属性、方法等信息,同时每个对象生成时都有特殊的标记位来指向堆中的Class对象。二、获取的三种方式1 、Class.forName("全路径名")2 、类名.Class3、实例对象...

2019-12-03 20:19:59 131

原创 Java基础(15) - Object类

一、Object类9大方法是哪些1、Clone方法实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常Java里参数传递,除了8种基本类型是值传递。其他类对象都是引用传递。2、getClass方法final方法,获得运行时类型。3、toString方法该方法用得比较多,一般子类都...

2019-12-03 20:19:21 81

原创 Java基础(13) - Error与Exception

一、Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。二、Exception异常 表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,...

2019-12-03 20:17:41 82

原创 Java基础 (14) - 多线程

多线程的方式有Thread、Runnable、Callable、ExecutorService四种方式1.Thread、Runnable区别(1) Thread是类,Runnable是接口(支持多继承)。Thread可以理解成实现了Runnable接口的类。(2) Runnable资源共享实现较简单。(3) 增加程序的健壮性,代码可以被多个线程共享,代码和数据独立(4) 线程池...

2019-12-03 20:16:29 85

原创 Java基础 (12) - 序列化

一、序列化是干什么的?内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。二、什么情况下序列化 a、对象需要持久化 (硬盘or数据库) b、网络传输 (套接字orRMI) c、在进程间传递对象三、序列化ID的作用java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本...

2019-12-03 20:14:01 51

原创 Java基础(4) - 引用类型

1、强引用虚拟机回收时,就算内存不足也不会回收。2、软引用虚拟机回收时,当内存不足时才回收。(使用时需判断是否为空)适合操作频率不高,想避免OutOfMemory异常的发生。(Bitmap)3、弱引用虚拟机回收时,只要发现有弱应用即回收。(使用时需判断是否为空)适合操作频率高,想应用有更好的性能。(handler)4、虚引用仅持有虚引用的对象,...

2019-12-03 20:13:42 51

原创 Java基础 (11) - 反射

一、能解决Java中编译分为静态编译和动态编译。静态编译:在编译时确定类型,绑定对象,即通过。动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多  态的应用,从而降低类之间的藕合性。二、能得到实现Java反射机制的类都位于java.lang.reflect包中:1、Class类:代表一个类2、Field类:类的属性(成...

2019-12-02 21:55:17 57

原创 Java基础(10) - 内部类

一、存在意义1、内部类可以很好的实现隐藏一般的非内部类,是不允许有private与protected权限的,但内部类可以2、内部类拥有外部类所有元素的访问权限 ,private修饰也能访问。3、可实现多重继承 ,让多个内部类分别继承多个其他类,使外部类可以同时获取多个其他类的属性。4、可以避免修改接口而实现同一个类中两种同名方法的调用。(外部类继承,让内部类实现接口)参考:...

2019-12-02 21:54:04 84

原创 Java基础(9) - 静态、代码块

关键字加载顺序 、类初始化 、方法区、进程一、存在作用变量 -> 全局共享 (跨线程,但不支持跨进程)方法 -> 不用类实例就能直接使用,避免New的消耗。(为什么静态方法不能访问非静态变量)代码块 -> 静态块在类初始化就运行 ,初始化顺序 静态代码块 -> 普通代码块 -> 构造方法 -> 普通方法,...

2019-12-02 21:53:12 74

原创 Java基础(8) - 接口、抽象类

存在的意义接口 - 接口对维护和解耦代码有很很好的帮助 同时由于接口常用来约束对象的行为,可实现”多继承“。抽象类 - 抽象类对于代码的维护和重用有很好的帮助。参考:接口 - https://blog.csdn.net/googleoyyp/article/details/78912259抽象类 - https://blog.csdn.net/chenchaozzu/a...

2019-12-02 21:51:28 53

原创 Java基础 (7) - 泛型

能解决1.参数“模板”化适用于多种数据类型执行相同的代码 泛型中的类型在使用时指定 泛型归根到底就是“模版”2、使用泛型时,在实际使用之前类型就已经确定了,不需要强制类型转换,防止程序运行时出现转换异常3、接受宽泛的数据类型泛型主要在集合类中使用,eg:List<String> list = new ArrayList<String>();St...

2019-12-02 21:50:54 91

原创 Java基础 (6) - 枚举

能解决1.类或方法强制使用者传入预设的值2.性能相对常量更好 - (Android环境除外)使用办法public enum ColorEnum{ WHITE("0x000001"),BLACK("0x000002"),GREEN("0x000003"); private final String color; private ColorEnum...

2019-12-02 21:49:49 52

原创 Java基础 (5) - 集合

一、分类Java集合大致分为 List、Set、Map 、Queue四种, List代表有序、重复的集合; Set代表无序、不可重复的集合; Map则代表具有映射关系的集合 Queue Java5增加,代表一种队列的集合二、List - 有序 | 重复常见的list有ArrayList、LinkedList、CopyOnWriteA...

2019-12-02 21:49:14 80

原创 Java基础 (2) - 基本数据类型及包装类

关键字位数、常量池、包装类(自动装拆箱)一、基本数据类型1、8种基本数据类型整数类型:byte,short,int,long浮点数类型:float(4B),double (8B)字符类型:char (2B)布尔类型:boolean (1B 或 4B)2、位数1、JVM规范中,boolean作为int处理,占4字节 ,boolean数组当做byte数组,占1...

2019-12-02 21:44:20 67

原创 Java基础 (3) - String

String StringBuilder/Buffer StringFormat一、可变与不可变 String -> private final char value[]; final 不可变的 StringBuilder/Buffer -> char value[] 可变的String设计成”不可变”对象是因为多个指引指向同一个内存空间,如任意指...

2019-12-02 21:42:11 120

原创 系统 - (1) - AsyncTask

一、什么是AsyncTask1、是一种轻量级的异步任务类;2、是一个封装了线程池和Handler的异步框架;3、使用它可以更加方便的执行后台任务以及在主线程访问UI,但他不适合进行特别耗时的后台任务;二、AsyncTask的使用方法1、3个参数Params:执行AsyncTask时,后台任务需要传入的参数,在doInBackground中取出使用。Progress...

2019-12-02 21:41:16 68

原创 Java基础 (2) - 基本数据类型及包装类

关键字 ->位数、常量池、包装类(自动装拆箱)一、8种基本数据类型整数类型:byte,short,int,long浮点数类型:float(4B),double (8B)字符类型:char (2B)布尔类型:boolean (1B 或 4B)二、位数1、JVM规范中,boolean作为int处理,占4字节 ,boolean数组当做byte数组,占1个字节。...

2019-12-01 21:03:47 73

原创 Java基础 (1) - 面向对象特性

1.抽象现实生活中的事物被抽象成对象,把具有相同属性和行为的对象被抽象成类,再从具有相同属性和行为的类中抽象出父类。(找出共同部分抽出来)2.封装隐藏对象的属性和实现细节,仅仅对外公开接口。3.继承子类和父类之间的继承关系,子类可以获取到父类的属性和方法。注:关于子类能否继承父类的私有方法?从语言角度上说:JDK官方文档明确说明子类不能继承父类的私有方法...

2019-12-01 21:01:06 65

原创 SDK - (2) - Handler

1、不允许在子线程中访问UI?UI控件非线程安全,多线程中并发访问会导致UI控件处于不可预期的状态。UI控件不上锁机制的原因有:上锁会让UI控件变得复杂和低效上锁后会阻塞某些进程的执行2、Handler.postDelayed()是否精确延时?当上一个消息存在耗时任务的时候,会占用延时任务执行的时机,当上一个任务耗用总时超过上下任务执行时间的时间差时,后一个任务会被延时...

2019-12-01 20:52:28 125

原创 SDK - (1) - AsyncTask

一、什么是AsyncTask1、是一种轻量级的异步任务类;2、是一个封装了线程池和Handler的异步框架;3、使用它可以更加方便的执行后台任务以及在主线程访问UI,但他不适合进行特别耗时的后台任务;二、AsyncTask的使用方法1、3个参数Params:执行AsyncTask时,后台任务需要传入的参数,在doInBackground中取出使用。Progress...

2019-12-01 20:50:12 91

原创 Framework(8) - WMS

一、主要功能 (1)计算与管理窗口的位置、层次(控制窗口的显示与隐藏的以及要显示的位置) (2)根据(1)来渲染窗口动画 (3)持有SurfaceControl,在Surface初始化的时候,会初始化一个Canvas(画布)二、主要成员mDecor:DecorView的实例,标示Window内部的顶级视图。mContentRoot:是DecorView的唯...

2019-12-01 20:48:18 161

原创 Framework(6) - AMS

一、AMS重要角色1.ActivityManagerServices,简称AMS,服务端对象,负责系统中所有Activity的生命周期。2.ActivityThread,App的真正入口。当开启App之后,调用main()开始运行,开启消息循环队列,这就是传说的UI线程或者叫主线程。与ActivityManagerService一起完成Activity的管理工作。3.Applicati...

2019-12-01 20:47:28 211

原创 Framework(5) - 系统启动

一、大致流程Cpu -> bootLoader ->native daemons -> android runtime -> zygote进程 -> systemService -> ams -> lanuch二、启动层级BootLoader引导 BootLoader是一段引导程序,类似于Windows开机时的出现第一个画面(有品牌...

2019-12-01 20:47:00 147

原创 Framework(4) - APP启动

Launcher本身就是一个应用程序,我们启动app时的本质是对Launcher这个app进行操作。Launcher接收到点击事件时调用startActivity方法,进行activity的跳转。但是与我们平时开发app有所不同,我们要启动的Activity所在的app运行在另外一个进程中,这就涉及到跨进程通信(IPC,Inter-Process Communication)。Android中...

2019-12-01 20:45:50 229

空空如也

空空如也

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

TA关注的人

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