- 博客(48)
- 收藏
- 关注
原创 3.JVM之类加载机制
文章目录类加载全过程加载如何触发加载Class文件如何获取二进制字节流对象堆内存的分配对象所需内存的大小在类加载完成 后便可完全确定,此时,就会在堆内存中开辟出一块对应大小的堆内存具体分配方式参考[4.对象的创建过程]中的(分配内存)验证文件格式验证元数据验证字节码验证符号引用验证准备解析初始化类构造器方法的由来方法的注意事项init和clinit类加载器启动类加载器 (Bootstrap ClassLoader)其他类加载器扩展类加载器(Extension ClassLoader)应用程序类加载器(Ap
2020-09-16 15:03:54 712
原创 2.JVM之内存管理机制
文章目录JVM内存区域划分程序计数器Java虚拟机栈局部变量表本地方法栈(Native Method Stack)Java堆深堆和浅堆方法区(Method Area)运行时常量池全限定名描述符描述符的三个方面符号引用和字面量JVM内存区域划分JVM执行Java程序的过程:Java源代码文件(.java)会被Java编译器编译为字节码文件(.class),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行运行时数据区被分为线程私有数据区和线程共享数据区两大类:
2020-09-16 15:02:41 395
原创 1.操作系统内存与JVM内存
文章目录操作系统内存与JVM内存模型寄存器的价值高速缓存高速缓存的价值高速缓存运作原理高速缓存的回收机制高速缓存与命中率缓存的写策略缓存一致性协议多线程与多核Jvm、Dalvik和Art的区别Java内存模型工作内存本地内存及其私有化性质java内存中的交互操作java内存中数据同步规则确保并发操作安全的八条原则操作系统内存与JVM内存模型硬件内存模型: 处理器->高速缓存->缓存一致性协议->主存寄存器的价值寄存器相关参考1. 距离寄存器在CPU内部.距离不是主要因素
2020-09-16 15:01:51 1703
原创 5.Kotlin协程
文章目录介绍:依赖:runBlockingGlobalScope.launchlaunch方法协程下上文启动模式协程体(suspend)async协程的生命周期监听取消(LifecycleObserver )协程绑定生命周期block绑定生命周期thenthenAsyncawaitOrNull介绍:协程就像非常轻量级的线程协程依赖于线程,但是协程挂起时不需要阻塞线程,几乎是无代价的一个线程中可以创建任意个协程线程的执行和结束是由操作系统调度的,而协程可以手动控制它的执行和结束依赖:kot
2020-08-09 13:42:11 556
原创 4.高阶函数
文章目录扩展函数letalsowithrunapplyusemapflatMapfoldreducejoinToStringfiltertakeWhileall,any,count,find,maxBy :对集合的判断应用groupBy闭包科理化偏函数综合小例子扩展函数let在函数块内可以通过 it 指代该对象返回值为函数块的最后一行或指定return表达式object?.let{//当object不为null的条件下,才会去执行let函数体 it.todo()...}also
2020-08-09 13:41:42 544
原创 3.Kotlin相比java新增语法
文章目录空指针防护表达式中缀表达式分支表达式扩展扩展函数扩展属性lambda表达lambda表达式简化过程有形参和无形参的区别Lambda表达式与函数Lambda表达式释义Lambda表达作为变量Lambda表达的空类型声明变量时的空类型函数形参的空类型Lambda 作为形参Lambda 作为形参的默认值Lambda 作为函数返回值Lambda 作为形参在java中使用扩展函数在Java中使用Lambda表达式for循环中局部返回使用标签返回匿名函数方式局部返回空指针防护 //main函数 fu
2020-08-09 13:41:10 559
原创 2.Kotlin重要关键字
文章目录object生成静态内部类生成匿名内部类对象生成单例对象companion : 伴生对象incline 内联函数By接口代理代理接口中的函数代理接口中的属性属性代理lateinitlazy成员变量的懒加载局部变量的懒加载lazy 取消同步锁监听赋值observable(赋值后)vetoable(赋值前)by map提供代理操作符object生成静态内部类class DemoManager{ object MyObject { fun a() {
2020-08-09 13:40:40 586
原创 1.Kotlin基础概念
文章目录基本概念修饰符数据类型对象修饰符变量和方法变量方法get和set静态变量和方法companion : 伴生对象静态变量静态方法类内部类(inner)生成匿名内部类对象密封类(sealed)构造函数二级构造函数创建类对象继承复写复写方法复写属性多继承中两个父类方法相同抽象类接口接口中的方法接口中的成员变量字符串判断isasif...else...when(替换Java中switch)for循环跳出for循环的两种方式基本概念修饰符public:默认限定符,可以省略不写privateprot
2020-08-09 13:40:06 721
原创 IPC3_AIDL的原理分析和各个使用方式
文章目录AIDL原理AIDL实例服务端与客户端解绑AIDL权限验证Binder的意外死亡重连问题AIDL原理服务端中的Service给与其绑定的客户端提供Binder对象,客户端通过AIDL接口中的asInterface()将这个Binder对象转换为代理Proxy,并通过它发起RPC请求。客户端发起请求时会挂起当前线程,并将参数写入data然后调用transact(),RPC请求会通过系统底层封装后由服务端的onTransact()处理,并将结果写入reply,最后返回调用结果并唤醒客户端线程。
2020-06-07 00:18:30 481
原创 IPC2_Binder机制
文章目录Binder机制优点Binder框架及原理客户端和服务端如何完成连接客户端和服务端如何交互(Binder 工作原理)Binder机制优点进程架构:Android的进程架构:每一个Android进程都是独立的,且都由两部分组成,一部分是用户空间,另一部分是内核空间,如下图:如此设计的优点:稳定性、安全性高:每一个Android进程都拥有自己独立的虚拟地址空间,一方面可以限制其他进程访问自己的虚拟地址空间;另一方面,当一个进程崩溃时不至于“火烧连营”。便于复用与管理:内核共享有助于系统维
2020-06-07 00:16:56 314
原创 View滑动冲突
当我们内外两层View都可以滑动时候,就会产生滑动冲突!1.外层与内层滑动方向不一致,外层ViewGroup是可以横向滑动的,内层View是可以竖向滑动的(类似ViewPager,每个页面里面是ListView)2.外层与内层滑动方向一致,外层ViewGroup是可以竖向滑动的,内层View同样也是竖向滑动的(类似ScrollView包裹ListView)注: 一场景有外部处理和内部处理两种发誓,二场景主要看逻辑实现解决方案有两种,外部处理和内部处理外部拦截法:// 外层view 的
2020-06-07 00:07:47 210
原创 自定义控件_折线图(动态加载,阴影效果,滑动效果)
文章目录使用布局文件折线图实现类 LineChart.java基础类 BaseLineChart.java基础类 BaseChart.javastyle样式属性使用inflate.findViewById(R.id.lineChart); Random random = new Random();//生成随机数 for (int i = 0; i < 80; i++) { data[i][0] =random.nextInt(19)+1;
2020-06-07 00:05:15 609
原创 自定义控件_柱状图
文章目录使用布局文件实现步骤图表类 ColumnChart.java基础类 BaseColumnChart.java基础类 BaseChart.javaColorstyle样式属性使用ColumnChart lineChart = findViewById(R.id.lineChart); //设定20组数据 int[][] data = new int[20][5]; data[0][1] = R.color.blue_rgba_24_261_255
2020-06-06 23:51:38 229
原创 自定义控件_数字跳转特效
文章目录外部调用数字跳转特效实现类 RectNumberView.java外部调用 <com.example.ocean.charts.RectNumberView android:id="@+id/rectNumberView" android:layout_width="match_parent" android:layout_height="400dp" />RectNumberVi
2020-06-06 23:49:58 203
原创 自定义控件_侧滑删除实现
用法:<com.example.administrator.myapplication.GestureDemoView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="80dp">
2020-06-06 23:47:52 264
原创 View的绘制流程一(视图的加载)
文章目录视图层级关系PhoneWindow的初始化ActivityThread.performLaunchActivityActivity的setContentViewPhoneWindow.setContentViewPhoneWindow.installDecorPhoneWindow.generateDecorPhoneWindow.generateLayout总结视图层级关系PhoneWindow的初始化PhoneWindow 伴随着 Activity 的创建而创建, 而 ActivityT
2020-06-06 23:45:28 354
原创 四.线程的原子类,线程池
什么是原子类一度认为原子是不可分割的最小单位,故原子类可以认为其操作都是不可分割为什么要有原子类?对多线程访问同一个变量,我们需要加锁,而锁是比较消耗性能的,JDk1.5之后,新增的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式,这些类同样位于JUC包下的atomic包下,发展到JDk1.8,该包下共有17个类,囊括了原子更新基本类型、原子更新数组、原子更新属性、...
2020-03-20 21:03:38 317
原创 三.JVM与线程的原子性,可见性,有序性,易变性
硬件内存模型高速缓存的价值运作原理缓存一致性协议多线程与多核Java内存模型工作内存本地内存及其私有化性质堆栈java内存间的交互操作内存间的交互操作需要满足的八条规则原子性什么是原子性synchronize,Lock保障原子性可见性不可见的原因synchronize 可见性volatile 关键有序性先行发生原则(8种...
2020-03-20 21:02:56 743
原创 二.线程的安全与通信
目录: * 1.线程优先级 * 2.饿死线程 * 3.线程安全 * 4.线程控制 * 5.线程中断与合并 * 6.线程创建的三种方式线程优先级:线程优先级:决定了线程按照什么顺序轮流执行,在具有线程调度的系统中,线程各自都有自己的线程优先级,优先级高的线程会被更早的执行,而优先级低的线程需要等更高优先级的可执行线程执行完成后才能执行。线程的优先级可以由用户手动设置,系统...
2020-03-20 21:02:08 412
原创 一.多线程的介绍
目录: * 1.任务调度 * 2.进程 * 3.多线程 * 4.多线程与进程的区别 * 5.多线程与多核 * 6.线程生命周期任务调度:在常用的系统中例如:Windows Linux,所采用的的任务调度方式是:时间片轮转抢占的调度方式,通俗的说就是:一个任务只执行很短的时间就被强行暂停去执行下一个任务。一个任务执行的这很短的时间叫做:时间片。一个任务处于运行执行的状...
2020-03-20 21:01:17 171
原创 Handler实现原理解析
目录:HandlerHandler概述Handler原理图主线程中为什么可以直接创建HanlderHandler使用的两种方式Handler中构造函数post,Message调用的原理LooperLooper的构造函数Looper的创建开启Looper循环的loop()MessgaeQueue工作原理HandlerHandler概述:Handl...
2020-01-30 16:46:44 579
原创 HandlerThread和IntentSerivce
HandlerThreadHandlerThread继承于THread,它的不同之处是在于可以使用Handler的Thread.public void run(){mTid-Process.myTid();Looper.prepare();synchronized (this){mLooper=Looper.myLooper();notifyA11();}Process....
2018-08-23 16:33:15 156
原创 AsyncTask解析
目录: * 1.AsyncTask介绍 * 2.AsyncTask中提供了四个核心方法 * 3.AsyncTask的注意事项 * 4.AsyncTask实现原理 * 5.AsyncTask执行的串行和并发AsyncTask介绍:简介:AsyncTask是一个轻量级的异步任务类,它可以在线程池中后台执行任务,可以将执行的进度和执行完成之后的结果返回到UI线程中;AsyncT...
2018-08-23 16:31:33 230
原创 Activity使用相关总结
Activity的生命周期图:onCreate :正在创建Activity,会进行一些初始化操作,会调用setContentView去加载布局视图文件onRestart : 当用户操作Home键,或打开新的activity又回退回来时,会调用 onStart : Activity正在被启动,但当前Activity还没有被加载到前台,不能与用户进行交互.onResume : Ac...
2018-08-23 16:29:23 431
原创 View的绘制流程二(视图的展示)
ViewRoot和DecorView整个界面的绘制是从ViewRoot开始的,ViewRoot的对应类是ViewRootlmp类,ViewRoot是连接DecorView和WindowManager的纽带。 界面绘制首先会调用其performTraversals()函数,然后它需要经过三个流程才能够将一个View绘制出来,分别经过measure,layout,draw三个流程,measure...
2018-08-09 17:28:07 1370
原创 Android事件分发机制
在事件分发过程中有三个非常重要的方法:// 该方法用于事件分发,在每次事件中该方法一定会被调用,返回值表示是否拦截此次事件,返回值收到onIterceptTouchEvent和onTouchEvent影响.public boolean dispathTouchEvent(MotionEvent ev )// 该方法用于判断是否拦截事件,当当前View对某一时间进行了拦截,则该事件序列...
2018-07-26 16:40:19 195
原创 IPC1_Activity多进程和接口Srializable和Parcelable序列化
IPC简介:IPC是inter-process Communication的缩写,意为进程间的通信.配置Activity多进程:<activity android:name=".abc" android:process=":abc"/><activity android:name=".def" android:...
2018-07-25 11:37:30 468
原创 注解与APT详解
什么是元注解:简单来说,就是注解的注解,元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明: 1. @Target, 2. @Retention, 3. @Documented, 4. @Inherited元注解的作用和相应分参数的使用说明:@Target: 该标...
2018-06-30 21:03:18 1669
原创 Android开发各类线程池说明及总结
线程池总结ThreadPoolExecutor:其所有的构造函数如下:corePoolSize 线程池中核心线程的数量maximumPoolSize 线程池中最大线程数量keepAliveTime 非核心线程的超时时长,当系统中非核心线程闲置时间超过keepAliveTime之后,则会被回收。如果ThreadPoolExecutor的allowCoreThreadTim...
2018-05-28 23:26:12 282
原创 Fragment三:对Fragment切换,跳转的封装
概述:在使用了良久的Fragment后,为了能够更方便更快捷更好的屏蔽掉fragment原有问题,于是自定对Fragemnt进行了使用的封装。目录: * 用法导入代码FragmentController的初始化API示例所需Copy代码用法导入代码在底部有类的完整源码,可自行Copy复制到项目。所需Copy代码FragmentController的初始化...
2018-03-26 16:09:10 810
原创 Fragment二:Fragment使用的各类问题及解决方案
概述:fragment有诸多的优势有点,但也存在着不足和一些隐藏的问题,以下是在开发过程中碰到的fragment各类问题,做以总结和分析:目录: * 1.fragment出栈以及同时多个出栈会导致的问题 * 2.Fragment回退监听问题 * 3.Fragment布局透明、布局重叠问题 * 4.Fragment页面动画跳转导致的问题 * 5.界面点击事件穿透问题 * 6.ge...
2018-03-23 16:27:26 2903
原创 Fragment一:FragmentManager和FragmentTransaction总结分析
概述:在使用fragment的路上也是呕心沥血,在此,对Fragment的各个重要的使用细节,问题,和使用场景,做详细总结分析,本篇幅不会对Fragemnt的基本使用,生命周期等作概括介绍Fragment使用优势简述: 1. 在activity的使用中,默认总会有过渡动画,是因为在切换的时候需要在对内存中做切换,而Fragment则轻量级很多,纵享丝滑的快。 2. 在使用中不需要在ma...
2018-03-21 15:50:10 6296
原创 Android内存泄漏的检测流程、捕捉以及分析
Android内存泄漏的检测流程、捕捉以及分析简述:一个APP的性能,重度关乎着用户体验,而关于性能检测的一个重要方面,就是内存泄漏,通常内存泄漏的隐藏性质比较强,不同于异常导致的程序Crash,在异常导致的Crash中,我们能够及时的发现程序问题的存在,并通过log日志定位到问题所在的具体位置,然后及时进行解决,而内存泄漏则不同,在APP中存在内存泄漏的情况下,用户在低频率短时间的使用中,并不能察
2017-09-13 12:11:54 30096
原创 android开发四种引用的详解
android开发四种引用的详解简述:在android开发中,开发到一定程度的之后,就会开始关注关于APP的各种性能优化,其中很重要的一个点,就是关于四种引用的合理引用,另外在android的各种面试中,也会经常被问到关于四种引用的各种问题。哪四种引用四种引用分别为: 1. 强引用(StrongRefernce) 2. 软引用(SoftReference) 3. 弱引用(WeakRefe
2017-09-08 18:45:17 8430 2
原创 QuickCache缓存原理解析
QuickCache前序在写QuickCache之前,我也进行了诸多的思考和考量,更多的出发点是源于,到底有没有自己写QuickCache的必要性,于是我于是我查阅和研究了当前市面的所成型的缓存部分的技术,发现,还是有自己写一个的必要性,原因基于以下几点:首先关于访问网络的请求,我本身在项目中所用的是okHttp,如果用ok的缓存机制,那就是用其拦截器进行缓存的相关操作;但是其本身只支持get访问
2017-05-07 10:50:11 457
原创 常用键值对集合解析(HashMap,LinkedHashMap,TreeMap,HashTable,WeakHashMap,SparseArray,Array)
常用键值对集合解析(HashMap,LinkedHashMap,TreeMap,HashTable,WeakHashMap,SparseArray,Array)
2017-03-25 17:52:26 2286
原创 Android 三分钟集成微信热修复Tinker
本篇文摘不过多赘述Tinker的原理以及API的使用,主要讲解快速集成的分解步骤。而在下面讲解的tinker,使用的是经过TinkerPath平台团队,再次经过封装之后的版本,更加方便开发者实现快速集成使用tinker。
2017-03-07 16:24:54 1108
原创 Java基础正则表达式、反射
正则表达式 好处:简化了书写 弊端:虽然简化了书写,但是却降低了阅读性。 组:用小括号标示,每定义一个小括号,就是一个组,而且有自动编号,从1开始。示例:/*需求:对QQ号进行校验*/ //要求“只能数字,5-15位,不能0开头 public static void checkQQ(String qq){ int len = qq.length();
2015-08-23 18:48:12 492
原创 Java基础网络编程
OSI参考模型 TCP/IP参考模型 应用层 | 表示层 |———————–> |应用层 会话层 | 传输层 |———————–> |传输层 网络层 |———————–> |网络层数据连接层 | 物理层|———————–> |主机之网络层网
2015-08-20 00:50:16 296
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人