- 博客(105)
- 资源 (5)
- 问答 (2)
- 收藏
- 关注
原创 在Flutter中集成Unity踩坑
劝退词先反思一下你们为什么要用flutter去集成unity?可不可以不用fluter去集成?如果可以的话,先放弃,用原生去集成吧,本文也不用看了,因为fluter集成实在太坑了,太降低效率了!步步坑机!如果非要用flutter去集成,或者想挑战下自己的忍耐力,那么请看下文。集成流程首先我们打开flutter项目,添加flutter-unity-view-weight依赖,我们直接在p...
2022-07-23 11:41:10
342
原创 年中省身-我的2022年中总结
theme: channing-cyan时光不负,创作不停,本文正在参加2022年中总结征文大赛年中省身不过刚眯了个眼,2022年就倏的过去了一半,手中的雪花还没化尽,凉意还在从指尖到心脏的某个神经元间卡着。关于今年上半年,其实就四个字:诸事不宜!工作和学习一谈到工作,我的话就少了,但是一谈到学习,我的话又多了。工作方面今年最大的转变就是,自己又重拾了Unity,这个玩...
2022-07-06 08:40:19
126
原创 Android ANR的设计原理
theme: channing-cyanhighlight: androidstudioANR的设计原理定时等待问题先来看个小故事老师给我布置了个作业,要求我10分钟内完成,他说10分钟后再来检查。10分钟后,老师来检查,发现我作业没完成,就把我的名字写在黑板上,来警示其他人。10分钟后,老师来检查,发现我作业写完了,就接着布置下一个作业了。但是,这里有个问题,...
2022-04-06 18:37:53
117
原创 BlockCanary源码精简分析
theme: channing-cyan卡顿的来源通过屏幕渲染机制我们知道:Android的屏幕渲染是通过vsync实现的,软件层将数据计算好后,放入缓冲区,硬件层再从缓冲区将数据读出来绘制到屏幕上,其中渲染周期是16ms,这样我们就看到了不断变化的画面。如果超过了16ms,就会发生卡顿,当然这个卡顿肯定是软件层的(如果发生在硬件层,换设备就行了)。那么,软件层的计算时间就需要小于...
2022-03-24 21:05:10
97
原创 LeakCanary源码精简分析
theme: channing-cyanJava四大引用强引用: 绝不回收软引用: 内存不足才回收弱引用: 碰到就回收虚引用: 等价于没有引用,只是用来标识下指向的对象是否被回收。弱引用的使用我们可以为弱引用指定一个引用队列,当弱引用指向的对象被回收时,此弱引用就会被添加到这个队列中,我们可以通过判断这个队列中有没有这个弱引用,来判断该弱引用指向的对象是否被回收了。...
2022-03-24 15:54:03
40
原创 年省吾身-我的2021年终总结
theme: channing-cyan2021的尾巴也没剩多少了,幸好我还是在它溜走前把这篇总结绑上去了,也不知道它能不能给我带过去。虽说一寸光阴一寸金,但这句话不是面向所有人的,因为某些人的大部分时间都花费在:马桶上刷手机,地铁上打游戏,以及,下班前10分钟等下班 的 这些事情上了。当然,这其中曾经也有我。当我明白这些的时候,幸好,还不晚,忆往昔之不谏,知来者之可追。所以,能把握现...
2022-03-24 12:32:07
55
原创 Compose中的简单动画
theme: channing-cyan可见性动画可见性动画指的是:当View的可见性发生变化时,有一个过渡效果。kotlin@Composablefun ColumnScope.AnimatedVisibility( visible: Boolean, // 当前是否可见 modifier: Modifier = Modifier, // 布局修饰符 ...
2021-12-11 16:32:30
90
原创 Compose中的主题
theme: channing-cyan设置Material主题Material主题主要包含三个属性: 颜色、排版和形状,API如下:@Composablefun MaterialTheme( colors: Colors = MaterialTheme.colors, // 颜色集合 typography: Typography = MaterialTheme...
2021-11-30 18:10:43
57
原创 将Compose迁移到现有项目中
theme: channing-cyan升级AndroidStudio你可以升级AndroidStudio为最新版,直接去AndroidStudio官网更新AndroidStudio即可。升级gradle你需要升级你的gradle为7.0及以上,如下:buildscript { ... dependencies { classpath "c...
2021-11-18 15:11:06
86
原创 宏观理解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
65
原创 消失性进度条
theme: channing-cyan小知识,大挑战!本文正在参与「程序员必备小知识」创作活动。本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。效果&使用图例分别为: * 修改读条起点为y轴正方向* 消失性读条* 正常读条使用:1 在xml中添加控件```width="62dp"android:layoutheight="62d...
2021-10-21 17:26:53
57
原创 Android中的艺术数字
theme: channing-cyan小知识,大挑战!本文正在参与「程序员必备小知识」创作活动。本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。效果使用代码如下:```width="wrapcontent" android:layoutheight="wrap_content" android:background="#FF0000" ...
2021-10-18 12:01:02
73
原创 冒泡排序的进化过程
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
54
原创 View的几个小工具
theme: channing-cyan小知识,大挑战!本文正在参与「程序员必备小知识」创作活动。本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。按下效果器Android在5.0以上 Button默认自带阴影效果,这是为了增加立体性和视觉效果,是非常好的。但是TMD,产品一句话: "跟IOS一样!",苦逼的Android开发就要去掉了,我们可以在xml中添加如下代...
2021-10-13 14:21:38
49
原创 Android Vsync原理简析
theme: channing-cyan小知识,大挑战!本文正在参与「程序员必备小知识」创作活动。本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。 屏幕渲染原理 "现代计算机之父"冯·诺依曼提出了计算机的体系结构: 计算机由运算器,存储器,控制器,输入设备和输出设备构成,每部分各司其职,它们之间通过控制信号进行交互。计算机发展到现在,已经出现了各种mini的...
2021-10-10 18:13:52
57
原创 深入理解编译期常量
theme: channing-cyan小知识,大挑战!本文正在参与「程序员必备小知识」创作活动。本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。什么是编译期常量我们知道,我们从写java代码开始,到代码执行的时候,中间一共经历四个阶段:* 1 新建.java文件 并写代码,这称为编辑期。* 2 将.java文件编译为.class文件,这称为编译期。* 3 ...
2021-10-08 17:34:49
74
原创 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
72
原创 swtich-case的实现原理与优化
theme: channing-cyan小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。实现原理语言的底层就是算法,所以switch-case的底层也是算法: 数组和二分查找。switch-case是一个条件语句,也就是说: 如果满足条件,那么就执行对应的指令,也就是: 找条件!那么就是查找!也就是算法里的查找!那么为什么是数组和二分查找呢?其实switch-...
2021-09-25 21:31:29
61
原创 字节码指令速记表
theme: channing-cyan小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。字节码指令速记字节码指令表字节码|助记符|指令含义:---|:--|:---0x00 | nop | 没卵用0x01 | aconstnull | 将null推送至栈顶0x02 | iconstm1 | 将int型-1推送至栈顶0x03 | icons...
2021-09-24 17:26:49
73
原创 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
54
原创 内联函数产生原因和原理
theme: channing-cyan为什么要内联函数因为: Kotlin为了书写简单,所以引入了lambda。但是: lambda会造成性能消耗。所以: 引入了内联函数来解决这个问题。如何证明lambda书写简单我们来实现个需求,diff一下有lambda和无lambda的代码便知。需求: 实现一个函数回调,回调一个String给我。Java版本(无lamb...
2021-09-16 14:59:36
49
原创 PyTorch 1.9 版本包括移动、科学计算和分布式训练更新
PyTorch, Facebook的开源深度学习框架,宣布发布1.9版, 其中包括对科学计算、移动支持和分布式训练的改进。总体而言,自 1.8 版本以来,新版本包含超过 3,400 次提交。PyTorch 团队在最近的一篇博文中强调了该版本的主要功能。新版本移动了 Complex Autograd 功能(音频处理的关键组件)和 torch.linalg 模块,其中包括 NumPy 的线性代数模...
2021-09-09 15:05:40
67
原创 带倒计时RecyclerView的设计心路历程
theme: channing-cyan需求目前有这样一个需求: 1 需要一个页面,展示多个条目2 每个条目有独立的倒计时,倒计时结束后就删除此条目3 每个条目上有删除按钮,点击可以删除该条目4 列表上的条目类型是多样的可行性分析首先肯定是可以做的: 1 用一个RecyclerView来实现2 每个item里面添加一个倒计时控件,注意倒计时是在item对应...
2021-09-01 17:27:09
34
原创 工厂模式的设计思想
theme: channing-cyan这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战什么是工厂模式所谓工厂模式,就是: 定义一个用于创建对象的接口,让子类去决定创建哪一个类,说白了 "就是创建什么类" 由子类来决定。说人话就是: 类由工厂创建,什么工厂?看业务,什么业务就是什么工厂。也就是说:将对类的创建这个动作延迟到具体的子类。我们根据图示就能写出顶层代...
2021-08-28 19:22:49
22
原创 常用的数据结构
theme: channing-cyan这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战线性表常见的线性表有两种: 顺序表和链表,我们先来diff下两者区别。顺序表顺序表是基于数组实现的,比如ArrayList,因为顺序,所以要占用一块连续的内存空间,因为不连续就不顺序了,因为要占用连续的内存空间,所以是比较egg pain的。首先,它不费内存,因为只需要存储...
2021-08-23 18:38:05
30
原创 站在思想层面看MVX架构
theme: channing-cyan这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战程序的本质程序的本质在于模拟现实,但是有更明确的分工简单的一个例子: 我 写 代码。这是一个主谓结构: 主语->我,谓语->写,宾语->代码。现在让我们来面向视角看问题:* 代码: 是个物体,是用来 被 写 的* 写: 是个动作,是用来 被 我执行的...
2021-08-19 18:57:47
39
原创 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
58
原创 泛型使用到原理
theme: channing-cyan这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战为什么要有泛型所谓泛型,就是类型参数化,也就是说,数据的类型不是固定的String,Integer,而是作为参数传入的。比如:// String就是参数,是List构造函数的参数。List<String> list = new ArrayList<>()...
2021-08-17 18:32:32
34
原创 Arouter从使用到原理
theme: channing-cyan这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战前言 凡是A,B无依赖关系,且想要互相通信的,其最基本的原理就是通过一个彼此都依赖的第三方C,不管是binder,socket,file,provider还是EventBus,Arouter等,都是这个原理,如果有人说不,那么要么是杠精,要么是想引人注意,要么就是放弃了治疗。...
2021-08-11 19:43:45
48
原创 双指针算法 | 8月更文挑战
theme: channing-cyan 双指针是最接近数学的基础算法思想,也是最容易理解的思想,其基本原理就是"作差"。 快慢指针 定义两个指针fast和slow,fast比slow快一点,fast在前,slow在后,利用fast和slow的距离差来解决问题。1 链表倒数第k个元素 利用快慢指针的距离差,快慢指针可以是你在我前面,我们之间的距离差为d,利...
2021-08-01 11:04:20
33
原创 同步中的工具类
theme: channing-cyan 读写锁 读写锁ReentrantReadWriteLock可以拆分为读锁和写锁,"读-读"操作完全并行(不是并发),"读-写"和"写-写"不能并行。"读-读"可以并行的原因是什么呢?我们在并发-锁章节说过,读锁是共享锁,所以才能并行读。先来看个demo:```public static class SafeList { ...
2021-07-27 08:47:12
29
原创 并发-线程池和异步任务
theme: channing-cyan 线程池 线程池可以理解为一个装线程的池子,可以复用线程,避免创建线程的开销;可以限制线程数量,避免资源消耗;可以更好的管理线程,避免野生线程;而且还有排队的作用,确保任务有序完成。 Tips:凡是池技术,第一想到的就是复用,比如线程池、数据库连接池等简单使用private static void testExecut...
2021-07-24 23:13:26
46
原创 并发容器
theme: channing-cyan写时复制的List和Set 写时复制(CopyOnWrite)的实现原理就是写时复制,它是线程安全的,支持并发访问,支持同时读写,它的迭代器不支持修改操作,也不会抛出ConcurrentModifationException,以原子方式实现一些复合操作。1 CopyOnWriteArrayList支持两个原子方法://不存在才添...
2021-07-21 21:34:35
33
原创 面试必备-线程中的锁
theme: channing-cyan Volatile Volatile有两个作用: 1 保证内存可见性内存可见性指的是: 一个线程修改了这个变量的值,另一个线程能立刻看到。 2 禁止指令重排(有序性)由于cpu在运行时,可能会根据上下文信息对指令做一些重排序,导致执行的顺序和我们期望的不一样,加了volatile之后,cpu将会取消对该变量的重排优化,...
2021-07-20 22:45:46
29
原创 线程的基础知识
theme: channing-cyan1 线程的基本概念创建线程的两个方法 继承Thread 和 实现Runnable,如果调用了线程的run()方法,那就是一个简单的函数调用,如果调用了start()方法,那么操作系统会分配一条单独的执行流,也就是会启动一个线程,只有调用了start()才会开启线程。线程的基本属性和方法: id,name,状态(State),...
2021-07-18 15:41:39
28
原创 反射的原理到使用
theme: channing-cyan引子众所周知,java有三大特性: 封装继承和多态,封装是为了细化权限,继承是为了多态,多态是为了灵活复用。我们又知道,继承破坏了封装,但是,它破坏的不彻底,有没有破坏的更彻底的呢?有,反射!反射效率很低,因为它工作在运行时,为什么工作在运行时呢?我们先来看个例子:```public class User { // 创建一个私有字段...
2021-07-15 23:12:39
33
原创 Java类加载基础
theme: channing-cyan1 java类加载时机引起类加载的场景* 1 使用new创建对象时* 2 读取或设置类的静态变量时(编译期常量除外)* 3 使用java.lang.reflect包中方法对类进行反射调用时* 4 初始化一个类时,会先初始化其父类,接口例外* 5 虚拟机启动的主类,也就是定义main()方法的那个类,会在虚拟机启动就初始化不会引起类加...
2021-07-14 20:56:21
34
原创 View的测量布局绘制过程
theme: channing-cyan 在上一篇文章View的显示过程末尾,重点提到了ViewRootImpl的四个方法: private void performTraversals() { ... //协商测量 measureHierarchy ... //测量 performMeasure(); ... //...
2021-07-13 22:29:27
48
原创 View的显示过程
theme: channing-cyan 本章我们来分析从Activity.setContentview()到Activity.onResume()的源码,先来个总结: * 1 setContentView(): 初始化DecorView,并没有添加到Window上 * 2 onResume()时,Activity并没有添加到屏幕上,onResume()之后才会添加到屏幕上,所...
2021-07-13 22:12:03
39
原创 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
54
数据结构的问题,反转链式表
2015-12-07
Android防止自己的程序被抓包
2015-09-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人