摘要:app启动时间查看: 1, log 中筛选displayd 可以看到相应的日志 如: 2, 如果要查看某一段方法的执行时间, Debug.startMethodTracing(“file_path/app1.trace”)........要测试的方法......Debug.stopMethodTra
阅读全文
10 2021 档案
摘要:app启动时间查看: 1, log 中筛选displayd 可以看到相应的日志 如: 2, 如果要查看某一段方法的执行时间, Debug.startMethodTracing(“file_path/app1.trace”)........要测试的方法......Debug.stopMethodTra
阅读全文
摘要:okhttp时一个http client, 它脱离了对原生的依赖, 从创建socket开始,整套都是自己写的 , 我们简单使用如下 1 val client = OkHttpClient.Builder().build() 2 val request = Request.Builder().url(
阅读全文
摘要:Retrofit是对okhttp的包装, 先看下简单使用: 1, 引入依赖 1 implementation 'com.squareup.retrofit2:retrofit:2.9.0' 2 implementation 'com.squareup.retrofit2:converter-gson
阅读全文
摘要:什么是https? https就是在http的基础上加了一个TLS层 ,http把数据发给tls,tls经过加密后再下发给tcp。 接收端tcp先把消息tls, tls解密后再返回给http tls是怎么加密的? 在双方建立连接的过程中, 客户端与服务器先用非对称加密的方式协商出一套密钥, 然后使用
阅读全文
摘要:多点触控基本上可以分为3种类型: 接力型: 新加进来的手指控制屏幕 配合型: 多个手指共同控制屏幕 各自为战型: 多个手指各自控制屏幕 现在就分别对这三种的实现做个小结: 开始之前我们先看下单点触控怎么实现 1 class MultiTouchView(context: Context, attri
阅读全文
摘要:1, 使用ViewPropertyAnimator可以实现一些简单的动画效果 从图中可以看到, View 的每个方法都对应了 ViewPropertyAnimator 的两个方法,其中一个是带有 -By 后缀的,例如,View.setTranslationX() 对应了 ViewPropertyAn
阅读全文
摘要:范围裁切 Android自定义View的范围裁切是通过canvas来实现的,主要是 canvas.clipRect() 和 canvas.clipPath() 两个方法 clipRect()用于裁切出一块矩形区域, 比如我们对上面的图先裁切再画 1 canvas.clipRect(padding,
阅读全文
摘要:自定义view的绘制离不开Paint, Paint的方法大致可以分为四类, 在这里小结一下:
阅读全文
摘要:先看下结果: 1 private val IMAGE_WIDTH = 200f.toPx 2 private val IMAGE_MARGIN = 20f.toPx 3 class PhotoView(context: Context, attributeSet: AttributeSet): Vi
阅读全文
摘要:先看下效果 在上一篇随笔中, 我们用到了画弧的方法, 1 /** 2 * <p> 3 * Draw the specified arc, which will be scaled to fit inside the specified oval. 4 * </p> 5 * <p> 6 * If th
阅读全文
摘要:我们知道一个自定义view一般来说需要继承view或者viewGroup并实现onMeasure, onLayout, onDraw方法。 其中onMeasure用于测量计算该控件的宽高, onLayout用来确定控件的摆放位置,onDraw执行具体的绘制动作。 今天主要学习onDraw 先看下de
阅读全文
摘要:1 class WaterFlowLayout constructor(context: Context, attrs: AttributeSet) : ViewGroup(context, attrs) { 2 3 override fun onLayout(changed: Boolean, l
阅读全文
摘要:先来了解一些基本概念: 1)什么是二叉平衡树? 之前我们了解过二叉查找树,我们说通常来讲, 对于一棵有n个节点的二叉查找树,查询一个节点的时间复杂度为log以2为底的N的对数。 通常来讲是这样的, 但是。。。有例外 比如,我们向一棵树中输入预先排好序的数据, 如1,2,3,4,5,。。。10000,
阅读全文
摘要:哈夫曼树通常用于压缩, 先看下哈夫曼树的由来 看上面这段代码, 结合右图中各个分数段的比例。 现在假设一共有100个学生, 那么一共要执行多少次判断的逻辑呢? 显然 5 + 15*2 + 40*3 + 30*4 +10*5 = 325次 那么是否可以优化呢? 当然也是可以的, 我们如果把分数占比大的
阅读全文
摘要:二叉查找树也叫二叉排序树,二叉搜索树, 它具备以下特性: 1)可以是一颗空树 2)如果不是空树,那么每个节点左子树的值都比该节点小;右子树的值都比该节点大 3)左右子树都为二叉树 4)原则上没有重复值(实际应用中如需要有重复值可忽略) 接下来我们来试着定义一棵二叉查找树 首先定义节点内部类: 1 /
阅读全文
摘要:如果有这样一个数组,整体是无序的, 但是前半部分和后半部分分别是有序的 现在我们定义一个方法对它进行排序: 1 /** 2 * array 如: intArrayOf(1,2,5,9,3,4,10,11) 3 * left = 0, 4 * middle = 4, 5 * right = 7 6 *
阅读全文
摘要:快速排序, 应用场景: 数据量大且为线性结构时。 短处:有大量重复数据的时候,性能不好 单向链式结构处理性能不好(一般来说,链式都不使用) 一次排序过程: 1)取一个高位指针和一个低位指针, 暂存低位指针的值temp 2)移动高位指针,如果值比Temp大,继续移动不做处理,如果比temp小,则取出来
阅读全文
摘要:顺序查找? 所谓顺序查找,就是从第一个元素开始,遍历表中的元素,以找到对应的节点 对于线性表来说, 如果该表是无序表, 那么不管它采用的是顺序存储还是链式存储, 都必须使用顺序查找。 如果该表是有序的,但是采用链式存储, 也必须使用顺序查找 当该表有序且顺序存储时, 我们可以采用二分查找 二分查找?
阅读全文
摘要:什么是树? 树是n(n>=0)个结点的有限集。n=0时称为空树,在任意一棵非空树中,有且仅有一个特定的称为根(root)的结点, 当n>1时,其余结点可分为m个互不相交的有限集。 下图中第一张图就不是树, 因为d和e相交 树的存储结构? 树的存储结构一般有4种, 1)双亲表示法,就是在每个节点中标示
阅读全文
摘要:1 public class RecursionTest { 2 3 4 /** 5 * 求n的阶乘 6 */ 7 private static int jiecheng(int n) { 8 if (n==1) { 9 return 1; 10 } 11 return n*jiecheng(n-1
阅读全文
摘要:有这样一道算法题, 假设有20个人围成一个圈,现在从第一个人开始报数,数到3的那个人出列,下一个人继续从1开始报数。。。。如此循环,最后剩下的人是谁? 首先我们定义一个单向循环链表 前文(从零开始学算法--自定义单链表 - 倒霉的菜鸟 - 博客园 (cnblogs.com))中已经自定义了单链表,
阅读全文
摘要:链表分为单向链表,双向链表,单向循环列表,双向循环链表 所谓单向链表是指 链表中的每个节点包含数据域和一个指针域, 指针域指向下一个节点, 如下图所示 知道了单链表的数据结构, 那么我们就先定义节点内部类Node,它包含了数据域item和指针域nextNode 1 public class Sing
阅读全文
摘要:先复习一些基本知识 链式存储的特点:用一组任意的存储单元(可以连续,也可以不连续)存储线性表的数据元素。 链式存储中每一个元素都是一个节点,每个节点中包含了数据域和指针域 相对数组存储来说,其优点是插入删除速度快,缺点是不支持随机访问,查询速度慢 什么是基数排序? 看看百度百科的定义: 基数排序(r
阅读全文
摘要:数据结构: 指计算机组织存储数据的方式, 其实就是数据之间的关系。我们通常从逻辑和存储两个角度来理解数据结构 逻辑结构:集合结构,线性结构,树形结构,图形结构 存储结构:表,数组,堆栈,队列,树,图。。。 衡量一个算法的优劣: 空间复杂度(算法运行时占用的内存空间)+时间复杂度(关键代码的执行次数)
阅读全文
|