- 博客(40)
- 资源 (2)
- 收藏
- 关注
原创 Glide原理--生命周期绑定
Gilde 的使用最基础的使用Glide.with(context).load(url).into(imageView)with方法Glide.with(context)with 重载方法with(android.app.Activity)with(android.app.Fragment)with(android.support.v4.app.Fragment)with(a...
2020-04-27 19:54:48
796
原创 kotlin -- 嵌套类 内部类 匿名内部类
嵌套类和内部类在java中于Kotlin中的对应关系类A在另一个类B中声明在Java中在Kotlin中嵌套类(不存储外部类的引用)static class Aclass A内部类(存储外不类的引用)class Ainner class A例子:class Test { var v = "成员属性" /** * 嵌套类 ...
2020-03-31 13:41:53
264
原创 Kotlin --类
这一年开发中没有使用kotlin ,果然又不会写了,还是记下吧本篇记录在Kotlin 中有关类的一些知识点,包括如下1.1 声明类1.2 构造函数1.2.1)主构造函数1.2.2) init1.2.3)二级构造函数(一个或多个)1.3 创建类的实例2. 继承2.1)继承类2.2)重载规则3. 抽象类4. 接口5. 伴生对象 companion6 .内部类7. 数据类7.1)声明数据类,如下:7....
2020-03-31 13:13:16
320
原创 java虚拟机(四)垃圾回收分代内存分配策略
对象的内存分配就是在堆上分配,在堆上是如何进行分配的已经分代策略普遍的内存分配规则在堆上分配(但也可能通过JIT编译后被拆散为标量类型并简介的栈上分配)对象主要分配在新生代的Eden区上如果启动了本地线程分配缓存,将按线程优先在TLAB上分配少数情况下也可能会直接分配在年老代内存分配的规则不是固定的,影响内存分配的规则和细节的因素有垃圾回收器组合虚拟机中的内存相关的参数的设置...
2020-03-24 18:20:51
222
原创 java虚拟机(三)垃圾收集器
此文章介绍垃圾收集器的种类,及各个收集的优缺点和相应的垃圾收集算法的应用垃圾收集器(7种)Serisl收集器ParNew收集器Parallel Scavenge 收集器Serial Old 收集器Parallel Old 收集器CMS 收集器G1垃圾回收器Serisl收集器Serisl收集器是最基本,发展历史最悠久的收集器,曾经在JDK1.3.1之前是虚拟机新生代收集的唯...
2020-03-24 18:13:26
162
原创 java虚拟机(一)java 内存区域划分
JAVA虚拟机在执行java程序的过程中会把它管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途,以及创建和销毁的时间,java 虚拟机所管理的内存将会包括一下几个运行时数据区域程序计数器是一块非常小的内存空间可以看做时当前线程所执行的字节码的行号指示器应用在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转...
2020-03-24 17:30:53
136
原创 java虚拟机(二)JAVA虚拟机中的垃圾收集算法
垃圾收集算法标记-清除算法复制算法标记-整理算法分代收集算法1. 标记-清除(Mark-Sweep)算法最基础的垃圾收集算法,后续的收集算法都是基于这中思路并对其不足进行改进而得到的算法分为"标记","清除"两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象标记-清除算法的缺点分配效率较低:如果是一块连续的内存空间,那么我们可以通过指针加法来...
2020-03-18 15:32:14
111
原创 JAVA 中的四种引用
在JDK1.2之后,java将引用分为四种,引用强度依次逐渐减弱强引用(Strong Reference)软引用(Soft Reference)弱引用(Weak Reference)虚引用(Phantom Reference)强引用(Strong Reference)强引用就是指在程序代码之中普遍存在的,类似Object obj = new Object() ,这类的引用只要强...
2020-03-18 12:50:28
114
原创 Tcp协议基础和常见面试问题
本篇文章是在看了别人的一些文章后,用于自己记录使用在之前先列出一些有关的基础知识OSI的七层模型TCP 工作在第四层(传输层)IP在第三层(网络层)ARP在第二层(数据链路层)在第二层上的数据叫做Frame在第三层上的数据叫Packet第四层的数据叫Segment基本过程数据从应用层发下来,会在每一层都加上头部信息,进行封装,然后再发送导数据接收端就是每个数据都会经过...
2020-03-05 21:37:10
802
原创 Android JNI开发:从 传统的ndk-build 转成 CMake编译 JNI代码
修改步骤:修改Gradle,增加对CMake的支持修改src/main/jni为src/main/cpprc/main/cpp增加CMakeLists.txt文件修改Gradle,增加对CMake的支持apply plugin: 'com.android.library'apply from: 'publish.gradle'apply from: './doc/quality/...
2020-02-25 20:03:30
974
原创 in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions
warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]起因:项目中为了兼容老版本,需要编译 armeabi 架构的so,但是使用的NDK 的版本为20,比较高的版本,优于高版本NDK 已经不再支持armeabi ,所以我使用了NDK 16的版本,然后...
2020-02-11 21:55:25
2111
原创 热更新原理
到现在猜开始了解热更新原理热更新方案有三种底层替换方案类加载方案Instant Run本篇文章主要是 类加载 和 Instant Run 两种方式进行的热更新类加载方案需要先了解Android 类加载,可以看这篇此处用到的是Android 中的 DexClassLoader 类加载器以下做简单的介绍Android 类加载BootClassLoaderDexClass...
2020-02-11 21:19:42
6192
原创 Android 中的类加载器
ClassLoader 的类型java 中的ClassLoader 加载的是jar 和class文件Android 中的ClassLoader 加载的是dex文件两种ClassLoader类型系统类加载器自定义加载器系统类加载器 (3种)BootClassLoaderPathClassLoaderDexClassLoaderBootClassLoaderAndr...
2020-02-10 16:08:54
993
原创 java 中的类加载器
-------------- Android 进阶解密笔记—类加载器 -------------------------ClassLoader的类型(两种)系统类加载器自定义类加载器系统类加载器(三种)Bootstrap ClassLoader (引导类加载器)Extensions ClassLoader (拓展类加载器)Application ClassLoader (应用...
2020-02-10 15:54:23
176
原创 记:jni编译 armeabi 报错
使用命令编译so/Users/jsj/Library/Android/sdk/ndk-bundle/ndk-build错误提示:Android NDK: The armeabi ABI is no longer supported. Use armeabi-v7a. Android NDK: NDK Application 'local' targets unknown ABI(s...
2019-12-20 15:38:46
740
原创 png序列帧转换WebP动画
最近项目要用webp格式展示动画(webp格式的优点在这我就不说了,baidu很多),由于UI同学无法给予我们支持,只能给我们png序列帧文件,所以接下来的事情需要开发自己转换,所有有了这篇的总结:进入正题对于png 、jpg、 gif 等格式转换webp ,google给提供了命令行工具,下载地址:https://storage.googleapis.com/downloads.webmpr...
2018-05-31 12:45:40
21749
4
原创 LruCache原理
LruCache 里面最要有几个重要因素设置LruCache缓存的大小,一般为当前进程可用容量的1/8重写sizeOf方法,计算出要缓存的每张图片的大小int maxMemory = (int) (Runtime.getRuntime().totalMemory()/1024); int cacheSize = maxMemory/8; mMemory...
2018-03-14 16:52:47
625
原创 RxJava2.0 基本使用,和场景
RxJava接触挺久了,但是在实际项目中大部分都是配合retrofit使网络请求使用,其他需求比较少,就是想用的时候会忘记怎么使用,所以这里做个笔记,希望也能帮到他人本文基于RxJava2.0RxJava自己觉得知道下面几点就比较清楚了RxJava的异步实现,是通过一种扩展的观察者模式来实现的RxJava 的观察者模式:Observable (可观察者,即被观察者)、 Observer (观察者
2017-11-19 17:38:58
392
原创 算法--冒泡排序
冒泡排序原理:相邻的两个数进行比较,如果满足条件进行交换排序: 4, 6, 5, 9, 2, 8 由小至大第一轮:从第一个开始,每相邻的两个数进行比较,符合调整的数往上冒,直至比较到最后一位,如图第二轮:从第一个开始,每相邻的两个数进行比较,符合调整的数往上冒,直至比较到n-1位,因为最后一位已经是最值无需再进行比较,如图第三轮:还是从第一个开始,每相邻的两个数进行...
2017-09-15 23:31:27
263
原创 算法--简单选择排序
简单选择排序原理:选择一个固定的位置,不断的跟其他位置的值去比较通过图说明: 对 4, 6, 5, 9, 2, 8进行排序第1轮:从第1个开始,逐个与其后面的进行比较,将较小的值前置,进行交换,结果为2,6,5,9,4,8结果如下图 第2轮:从第2个开始,逐个与其后面的进行比较,将较小的值前置,进行交换,结果为2,4,6,9,5,8 结果如下图 第3轮:从第3个开始,逐个与其后面的进行比较,
2017-09-15 21:29:36
283
原创 java 虚拟机内存分配
内存结构:Java程序在运行时,需要在内存中分配空间,为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式共分配了5块区域,每区域中处理方式不同栈内存、堆内存、 方法区、本地方法区、寄存器栈内存:用于存储局部变量当数据使用完,所占空间会自动释放例如:int a = 5;int b = a;b = 8;堆内存用于存放数组和对象,通过new建立的实
2017-09-13 23:43:03
321
原创 IntentService 使用与原理
IntentService简介在Service里面不能直接进行耗时操作,一般都需要去开启子线程,如果自己去管理Service的生命周期以及子线程难免会不完善,Android提供了一个类,IntentService。IntentService是一个基于Service的一个类,用来处理异步的请求。你可以通过startService(Intent)来提交请求,该Service会在需要的时候创建,当完成
2017-09-13 15:31:10
315
原创 android 自定义控件--Path 基本用法
Path 使用方法详解此篇是看了一名来自2.5次元的魔法师的文章后做的笔记,原文http://www.gcssloop.com/customview/Path_Bezier,大家可以看下,文很棒1. 第一组:moveTo、setLastPoint 、lineTo 、close方法:lineTopublic void lineTo (float x, float y)例:画两条线 public Pat
2017-08-03 12:14:07
565
原创 RxJava2.0使用
RxJava 2.0 使用引用 compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0.1' //RxBinding 使用 compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0' compile
2017-07-25 17:09:16
497
原创 Android View添加到Window的过程
Android 界面显示的过程可以分为两个步骤 1.是将我们要显示的布局添加到window上 2.在进行测量、布局、绘制 通过这两步我们想看到的View就显示在Window上了今天说下View是怎么添加到Window上的首先要从Activity的setContentView开始public void setContentView(View view) { getWindow().set
2017-04-20 19:19:16
3692
原创 对android 6.0 动态获取权限框架 PermissionDispatcher 的使用
对android 6.0 动态获取权限框架 PermissionDispatcher 的使用android studio 引入 需要使用PermissionsDispatcher,需要在project的 build.gradle中添加buildscript { dependencies { classpath 'com.neenbedankt.gradle.plugins:androi
2016-10-12 12:12:29
3763
原创 不同方式切换Fragment时,生命周期的回调的不同
先上张Fragment 生命周期图下面开始通过不同的Fragment的切换方式来分别说明生命周期的调用通过add hide show 方式来切换Fragment切换方法使用:@Override public void onCheckedChanged(RadioGroup radioGroup, int checkedId) { mFragmentTransaction
2016-08-30 11:21:57
9356
原创 retrofit 2.0 +RxAndroid 使用中遇到异常 【abstract method not implemented】
在retrofit 2.0 +RxAndroid 程序运行时,报错java.lang.AbstractMethodError: abstract method not implemented at retrofit.RxJavaCallAdapterFactory.get(RxJavaCallAdapterFactory.java)解决方法:将 compile 'com.squareup.retr
2016-06-23 11:40:43
828
原创 总结Android 性能优化的几个方面
一 、总结Android 性能优化的几个方面1. 布局优化尽量减少布局文件的层级,这样Android 在绘制的时候工作量减少了,就会提高性能删除布局中无用的控件和层级选择使用性能较低的ViewGroup,比如RelativeLayout 在RelativeLayout 和LinearLayout 中劲量使用 LinearLayout,因为RelativeLayout相对于比较复杂,布局过程需
2016-06-20 11:34:45
459
原创 android线程池--ThreadPoolExecutor
ThreadPoolExecutorThreadPoolExecutor 是线程池的真正实现,它的构造方法提供了一系列参数来配置线程池 这些参数直接影响到线程池的功能特性public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
2016-06-20 11:30:08
576
原创 LeakCanary (Android 检测内存泄漏工具的使用)
LeakCanary是andrid 检测内存泄漏的工具,使用起来比MAT方便很多下面介绍LeakCanary 的使用 下面是在在androidStudio 中使用 首先 在 build.gradle 中加入引用,不同的编译使用不同的引用:dependencies { debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.
2016-06-16 10:42:56
595
原创 PriorityQueue
PriorityQueue优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。 需要实现Comparator接口,实现按照自己的意愿进行优先级排列的队列 如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列。public class MainActivity extends AppCompatA
2016-06-15 15:26:13
403
原创 View 的工作原理
android开发艺术探索,笔记4.1 ViewRoot 和 DecorViewView的绘制的三大流程:measure、 layout 、draw ViewRoot对应于ViewRootImpl 类,它是连接WindowManager 和DecorView的纽带,View的三大流程均是通过ViewRoot 来完成的,在ActivityThread中,当Activity对象被创建完毕后,会将De
2016-06-14 15:10:06
352
原创 View 的滑动冲突
解决方案: 1. 外部拦截法 2. 内部拦截法外部拦截法指通过父容器进行拦截处理,外部拦截需要重写父容器的onInterceptTouchEvent 方法,在内部做相应的拦截 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { boolean intercept = false;//是否拦截
2016-06-14 11:13:23
344
原创 RxJava--RxBinding
RxBinding 是 Jake Wharton 的一个开源库,它提供了一套在 Android 平台上的基于 RxJava 的 Binding API。所谓 Binding,就是类似设置 OnClickListener 、设置 TextWatcher 这样的注册绑定对象的 API。首先需要引入lib android Studio compile 'com.jakewharton.rxbinding
2016-06-08 16:22:24
584
原创 RxJava--Scheduler (线程控制 )
Scheduler调度器,相当于线程控制器 在不指定线程的情况下, RxJava 遵循的是线程不变的原则,即:在哪个线程调用 subscribe(),就在哪个线程生产事件;在哪个线程生产事件,就在哪个线程消费事件。如果需要切换线程,就需要用到 Scheduler (调度器)Scheduler 的 APISchedulers.immediate(): 直接在当前线程运行,相当于不指定线程。这是默认
2016-06-08 15:29:05
2290
原创 RxJava
RxJava是什么RxJava是一种异步方式:类似于android中的AsyncTask 和Handler ,RxJava并不是一个”拿来就能用”的项目,他需要我们像学习门新语言一样从语法–>词汇–>用法的学习过程作用是什么用于:逻辑的简洁,并不是单纯的代码量少RxJava 的使用创建一个被观察者Observable<String> myObservable = Observable.creat
2016-06-07 17:53:39
411
原创 android -view基础
3.1.2.view 的位置view的位置主要由它的四个顶点来决定,分别对应于view的四个属性:top、left、right、bottom,top:左上角纵坐标left: 左上角横坐标right:右下角横坐标bottom:右下角纵坐标这些坐标都是相对于view的父容器来说的:如图:通过坐标很容易得出view的宽和高width = right - leftheight = bottom-top关于v
2016-06-02 11:45:48
295
原创 EditText设置失去焦点和重新获取焦点
1.失去焦点editText.setFocusable(false);2.重新获取焦点editText.setFocusable(ture);editText.setFocusableInTouchMode(true);editText.requestFocus();
2016-03-22 15:38:06
1063
原创 键盘隐藏和显示的方法
隐藏:InputMethodManager imm = (InputMethodManager) ExpressSelectActivity.this.getSystemService(INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(v.getWindowToken(), 0);显示:InputMethodManager
2016-03-22 15:37:10
398
实战Gradle_PDF电子书下载 高清 带索引书签目录_(美)马斯可著_北京:电子工业出版社
2017-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人