自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 资源 (5)
  • 问答 (2)
  • 收藏
  • 关注

原创 在Flutter中集成Unity踩坑

劝退词先反思一下你们为什么要用flutter去集成unity?可不可以不用fluter去集成?如果可以的话,先放弃,用原生去集成吧,本文也不用看了,因为fluter集成实在太坑了,太降低效率了!步步坑机!如果非要用flutter去集成,或者想挑战下自己的忍耐力,那么请看下文。集成流程首先我们打开flutter项目,添加flutter-unity-view-weight依赖,我们直接在p...

2022-07-23 11:41:10 126

原创 年中省身-我的2022年中总结

theme: channing-cyan时光不负,创作不停,本文正在参加2022年中总结征文大赛年中省身不过刚眯了个眼,2022年就倏的过去了一半,手中的雪花还没化尽,凉意还在从指尖到心脏的某个神经元间卡着。关于今年上半年,其实就四个字:诸事不宜!工作和学习一谈到工作,我的话就少了,但是一谈到学习,我的话又多了。工作方面今年最大的转变就是,自己又重拾了Unity,这个玩...

2022-07-06 08:40:19 63

原创 Android ANR的设计原理

theme: channing-cyanhighlight: androidstudioANR的设计原理定时等待问题先来看个小故事老师给我布置了个作业,要求我10分钟内完成,他说10分钟后再来检查。10分钟后,老师来检查,发现我作业没完成,就把我的名字写在黑板上,来警示其他人。10分钟后,老师来检查,发现我作业写完了,就接着布置下一个作业了。但是,这里有个问题,...

2022-04-06 18:37:53 59

原创 BlockCanary源码精简分析

theme: channing-cyan卡顿的来源通过屏幕渲染机制我们知道:Android的屏幕渲染是通过vsync实现的,软件层将数据计算好后,放入缓冲区,硬件层再从缓冲区将数据读出来绘制到屏幕上,其中渲染周期是16ms,这样我们就看到了不断变化的画面。如果超过了16ms,就会发生卡顿,当然这个卡顿肯定是软件层的(如果发生在硬件层,换设备就行了)。那么,软件层的计算时间就需要小于...

2022-03-24 21:05:10 38

原创 LeakCanary源码精简分析

theme: channing-cyanJava四大引用强引用: 绝不回收软引用: 内存不足才回收弱引用: 碰到就回收虚引用: 等价于没有引用,只是用来标识下指向的对象是否被回收。弱引用的使用我们可以为弱引用指定一个引用队列,当弱引用指向的对象被回收时,此弱引用就会被添加到这个队列中,我们可以通过判断这个队列中有没有这个弱引用,来判断该弱引用指向的对象是否被回收了。...

2022-03-24 15:54:03 16

原创 年省吾身-我的2021年终总结

theme: channing-cyan2021的尾巴也没剩多少了,幸好我还是在它溜走前把这篇总结绑上去了,也不知道它能不能给我带过去。虽说一寸光阴一寸金,但这句话不是面向所有人的,因为某些人的大部分时间都花费在:马桶上刷手机,地铁上打游戏,以及,下班前10分钟等下班 的 这些事情上了。当然,这其中曾经也有我。当我明白这些的时候,幸好,还不晚,忆往昔之不谏,知来者之可追。所以,能把握现...

2022-03-24 12:32:07 22

原创 Compose中的简单动画

theme: channing-cyan可见性动画可见性动画指的是:当View的可见性发生变化时,有一个过渡效果。kotlin@Composablefun ColumnScope.AnimatedVisibility( visible: Boolean, // 当前是否可见 modifier: Modifier = Modifier, // 布局修饰符 ...

2021-12-11 16:32:30 25

原创 Compose中的主题

theme: channing-cyan设置Material主题Material主题主要包含三个属性: 颜色、排版和形状,API如下:@Composablefun MaterialTheme( colors: Colors = MaterialTheme.colors, // 颜色集合 typography: Typography = MaterialTheme...

2021-11-30 18:10:43 19

原创 将Compose迁移到现有项目中

theme: channing-cyan升级AndroidStudio你可以升级AndroidStudio为最新版,直接去AndroidStudio官网更新AndroidStudio即可。升级gradle你需要升级你的gradle为7.0及以上,如下:buildscript { ... dependencies { classpath "c...

2021-11-18 15:11:06 31

原创 宏观理解JVM&DVM&ART

theme: channing-cyan引子1 什么是JVM?什么是DVM?什么是ART?2 它们之间有什么关系?3 Android是跑在JVM中?还是DVM中?还是ART中?4 如果跑在JVM中,那么DVM和ART又是干什么的?如果不是跑在JVM中?那为什么要学JVM相关知识?工作原理其实DVM(Dalvik)和ART是一类的,这里统称为:Android虚拟机,JV...

2021-11-01 17:01:30 29

原创 消失性进度条

theme: channing-cyan小知识,大挑战!本文正在参与「程序员必备小知识」创作活动。本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。效果&使用图例分别为: * 修改读条起点为y轴正方向* 消失性读条* 正常读条使用:1 在xml中添加控件```width="62dp"android:layoutheight="62d...

2021-10-21 17:26:53 18

原创 Android中的艺术数字

theme: channing-cyan小知识,大挑战!本文正在参与「程序员必备小知识」创作活动。本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。效果使用代码如下:```width="wrapcontent" android:layoutheight="wrap_content" android:background="#FF0000" ...

2021-10-18 12:01:02 25

原创 冒泡排序的进化过程

theme: channing-cyan小知识,大挑战!本文正在参与「程序员必备小知识」创作活动。本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。0 基础版本所有情况下时间复杂度都为O($n^2$)public static void bob(int[] array) { // 总共比较n-1轮 for (int i = 0; i < a...

2021-10-14 15:11:50 16

原创 View的几个小工具

theme: channing-cyan小知识,大挑战!本文正在参与「程序员必备小知识」创作活动。本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。按下效果器Android在5.0以上 Button默认自带阴影效果,这是为了增加立体性和视觉效果,是非常好的。但是TMD,产品一句话: "跟IOS一样!",苦逼的Android开发就要去掉了,我们可以在xml中添加如下代...

2021-10-13 14:21:38 17

原创 Android Vsync原理简析

theme: channing-cyan小知识,大挑战!本文正在参与「程序员必备小知识」创作活动。本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。 屏幕渲染原理 "现代计算机之父"冯·诺依曼提出了计算机的体系结构: 计算机由运算器,存储器,控制器,输入设备和输出设备构成,每部分各司其职,它们之间通过控制信号进行交互。计算机发展到现在,已经出现了各种mini的...

2021-10-10 18:13:52 30

原创 深入理解编译期常量

theme: channing-cyan小知识,大挑战!本文正在参与「程序员必备小知识」创作活动。本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。什么是编译期常量我们知道,我们从写java代码开始,到代码执行的时候,中间一共经历四个阶段:* 1 新建.java文件 并写代码,这称为编辑期。* 2 将.java文件编译为.class文件,这称为编译期。* 3 ...

2021-10-08 17:34:49 31

原创 switch-case对String的特殊处理

theme: channing-cyan小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。我们在swtich-case的实现原理与优化中说到,switch-case对String的处理是通过String的hashcode来实现的。那么,如果两个String的hashcode相同会怎么样呢?比如"Aa"和"BB",他们的hashcode都是2112,那么如下函数:publ...

2021-09-26 14:09:42 27

原创 swtich-case的实现原理与优化

theme: channing-cyan小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。实现原理语言的底层就是算法,所以switch-case的底层也是算法: 数组和二分查找。switch-case是一个条件语句,也就是说: 如果满足条件,那么就执行对应的指令,也就是: 找条件!那么就是查找!也就是算法里的查找!那么为什么是数组和二分查找呢?其实switch-...

2021-09-25 21:31:29 23

原创 字节码指令速记表

theme: channing-cyan小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。字节码指令速记字节码指令表字节码|助记符|指令含义:---|:--|:---0x00 | nop | 没卵用0x01 | aconstnull | 将null推送至栈顶0x02 | iconstm1 | 将int型-1推送至栈顶0x03 | icons...

2021-09-24 17:26:49 25

原创 Kotlin协程实现原理概述

theme: channing-cyan协程的顶层实现-CPSCPS(Continuation-Passing-Style, 续体传递风格)现有如下代码:fun test(a: Int, b: Int) { // 求和 var result = a + b // 乘以2 result = result shl 1 // 加2 re...

2021-09-23 14:24:54 18

原创 内联函数产生原因和原理

theme: channing-cyan为什么要内联函数因为: Kotlin为了书写简单,所以引入了lambda。但是: lambda会造成性能消耗。所以: 引入了内联函数来解决这个问题。如何证明lambda书写简单我们来实现个需求,diff一下有lambda和无lambda的代码便知。需求: 实现一个函数回调,回调一个String给我。Java版本(无lamb...

2021-09-16 14:59:36 16

原创 PyTorch 1.9 版本包括移动、科学计算和分布式训练更新

PyTorch, Facebook的开源深度学习框架,宣布发布1.9版, 其中包括对科学计算、移动支持和分布式训练的改进。总体而言,自 1.8 版本以来,新版本包含超过 3,400 次提交。PyTorch 团队在最近的一篇博文中强调了该版本的主要功能。新版本移动了 Complex Autograd 功能(音频处理的关键组件)和 torch.linalg 模块,其中包括 NumPy 的线性代数模...

2021-09-09 15:05:40 22

原创 带倒计时RecyclerView的设计心路历程

theme: channing-cyan需求目前有这样一个需求: 1 需要一个页面,展示多个条目2 每个条目有独立的倒计时,倒计时结束后就删除此条目3 每个条目上有删除按钮,点击可以删除该条目4 列表上的条目类型是多样的可行性分析首先肯定是可以做的: 1 用一个RecyclerView来实现2 每个item里面添加一个倒计时控件,注意倒计时是在item对应...

2021-09-01 17:27:09 15

原创 工厂模式的设计思想

theme: channing-cyan这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战什么是工厂模式所谓工厂模式,就是: 定义一个用于创建对象的接口,让子类去决定创建哪一个类,说白了 "就是创建什么类" 由子类来决定。说人话就是: 类由工厂创建,什么工厂?看业务,什么业务就是什么工厂。也就是说:将对类的创建这个动作延迟到具体的子类。我们根据图示就能写出顶层代...

2021-08-28 19:22:49 9

原创 常用的数据结构

theme: channing-cyan这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战线性表常见的线性表有两种: 顺序表和链表,我们先来diff下两者区别。顺序表顺序表是基于数组实现的,比如ArrayList,因为顺序,所以要占用一块连续的内存空间,因为不连续就不顺序了,因为要占用连续的内存空间,所以是比较egg pain的。首先,它不费内存,因为只需要存储...

2021-08-23 18:38:05 12

原创 站在思想层面看MVX架构

theme: channing-cyan这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战程序的本质程序的本质在于模拟现实,但是有更明确的分工简单的一个例子: 我 写 代码。这是一个主谓结构: 主语->我,谓语->写,宾语->代码。现在让我们来面向视角看问题:* 代码: 是个物体,是用来 被 写 的* 写: 是个动作,是用来 被 我执行的...

2021-08-19 18:57:47 14

原创 Compose中的布局

theme: channing-cyan这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战线性布局Column和Row竖直线性布局API如下:inline fun Column( modifier: Modifier = Modifier, // 修饰符 verticalArrangement: Arrangement.Vertical = Arra...

2021-08-18 15:12:07 21

原创 泛型使用到原理

theme: channing-cyan这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战为什么要有泛型所谓泛型,就是类型参数化,也就是说,数据的类型不是固定的String,Integer,而是作为参数传入的。比如:// String就是参数,是List构造函数的参数。List<String> list = new ArrayList<>()...

2021-08-17 18:32:32 14

原创 Arouter从使用到原理

theme: channing-cyan这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战前言 凡是A,B无依赖关系,且想要互相通信的,其最基本的原理就是通过一个彼此都依赖的第三方C,不管是binder,socket,file,provider还是EventBus,Arouter等,都是这个原理,如果有人说不,那么要么是杠精,要么是想引人注意,要么就是放弃了治疗。...

2021-08-11 19:43:45 17

原创 双指针算法 | 8月更文挑战

theme: channing-cyan 双指针是最接近数学的基础算法思想,也是最容易理解的思想,其基本原理就是"作差"。 快慢指针 定义两个指针fast和slow,fast比slow快一点,fast在前,slow在后,利用fast和slow的距离差来解决问题。1 链表倒数第k个元素 利用快慢指针的距离差,快慢指针可以是你在我前面,我们之间的距离差为d,利...

2021-08-01 11:04:20 11

原创 同步中的工具类

theme: channing-cyan 读写锁 读写锁ReentrantReadWriteLock可以拆分为读锁和写锁,"读-读"操作完全并行(不是并发),"读-写"和"写-写"不能并行。"读-读"可以并行的原因是什么呢?我们在并发-锁章节说过,读锁是共享锁,所以才能并行读。先来看个demo:```public static class SafeList { ...

2021-07-27 08:47:12 13

原创 并发-线程池和异步任务

theme: channing-cyan 线程池 线程池可以理解为一个装线程的池子,可以复用线程,避免创建线程的开销;可以限制线程数量,避免资源消耗;可以更好的管理线程,避免野生线程;而且还有排队的作用,确保任务有序完成。 Tips:凡是池技术,第一想到的就是复用,比如线程池、数据库连接池等简单使用private static void testExecut...

2021-07-24 23:13:26 16

原创 并发容器

theme: channing-cyan写时复制的List和Set 写时复制(CopyOnWrite)的实现原理就是写时复制,它是线程安全的,支持并发访问,支持同时读写,它的迭代器不支持修改操作,也不会抛出ConcurrentModifationException,以原子方式实现一些复合操作。1 CopyOnWriteArrayList支持两个原子方法://不存在才添...

2021-07-21 21:34:35 11

原创 面试必备-线程中的锁

theme: channing-cyan Volatile Volatile有两个作用: 1 保证内存可见性内存可见性指的是: 一个线程修改了这个变量的值,另一个线程能立刻看到。 2 禁止指令重排(有序性)由于cpu在运行时,可能会根据上下文信息对指令做一些重排序,导致执行的顺序和我们期望的不一样,加了volatile之后,cpu将会取消对该变量的重排优化,...

2021-07-20 22:45:46 13

原创 线程的基础知识

theme: channing-cyan1 线程的基本概念创建线程的两个方法 继承Thread 和 实现Runnable,如果调用了线程的run()方法,那就是一个简单的函数调用,如果调用了start()方法,那么操作系统会分配一条单独的执行流,也就是会启动一个线程,只有调用了start()才会开启线程。线程的基本属性和方法: id,name,状态(State),...

2021-07-18 15:41:39 13

原创 反射的原理到使用

theme: channing-cyan引子众所周知,java有三大特性: 封装继承和多态,封装是为了细化权限,继承是为了多态,多态是为了灵活复用。我们又知道,继承破坏了封装,但是,它破坏的不彻底,有没有破坏的更彻底的呢?有,反射!反射效率很低,因为它工作在运行时,为什么工作在运行时呢?我们先来看个例子:```public class User { // 创建一个私有字段...

2021-07-15 23:12:39 15

原创 Java类加载基础

theme: channing-cyan1 java类加载时机引起类加载的场景* 1 使用new创建对象时* 2 读取或设置类的静态变量时(编译期常量除外)* 3 使用java.lang.reflect包中方法对类进行反射调用时* 4 初始化一个类时,会先初始化其父类,接口例外* 5 虚拟机启动的主类,也就是定义main()方法的那个类,会在虚拟机启动就初始化不会引起类加...

2021-07-14 20:56:21 15

原创 View的测量布局绘制过程

theme: channing-cyan 在上一篇文章View的显示过程末尾,重点提到了ViewRootImpl的四个方法: private void performTraversals() { ... //协商测量 measureHierarchy ... //测量 performMeasure(); ... //...

2021-07-13 22:29:27 23

原创 View的显示过程

theme: channing-cyan 本章我们来分析从Activity.setContentview()到Activity.onResume()的源码,先来个总结: * 1 setContentView(): 初始化DecorView,并没有添加到Window上 * 2 onResume()时,Activity并没有添加到屏幕上,onResume()之后才会添加到屏幕上,所...

2021-07-13 22:12:03 12

原创 Android View基础

theme: channing-cyan1 View的基础属性int mLeft: View左边距,即View的左边 距离 父View左边 的距离 int mTop: View上边距,即View的上边 距离 父View上边 的距离 int mRight: View右边距,即View的右边 距离 父View右边 的距离 int mBottom: View下边距,即View的下边 距...

2021-07-13 22:05:23 29

java网络编程PPT

java网络编程,OSI以及TCP/IP各层均有讲解,附加代码演示,原理剖析,在学习Java的基础上增进对网络和线程的理解

2016-01-27

谷歌Volley宣讲PPT

谷歌开源框架Volley实现宣讲PPT,附带实现方法,功能概述,实现原理剖析

2016-01-27

android反编译

可以用来反编译未经过加密处理的app,先使用dex2来得到class文件,然后通过jui来反编译得到代码

2015-12-18

java七种排序算法

面试经常问到的七种Java排序算法,代码能通过编译并运行

2015-12-11

java for Android

学习安卓的java入门知识,外加上Android 的一些基本控件介绍

2015-07-31

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

TA关注的人

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