- 博客(79)
- 资源 (4)
- 收藏
- 关注
原创 Vue3 + TS 如何给组件添加类型标注
当我们在 Vue 项目里获取组件的实例时,一般都是在 <template> 模板直接 ref="your name",这种方式实际也是调用 document.getElementXXX ,但是在 TS 语言下有一个问题,我们该如何定义这个类型,一般情况下开发工具无法正确提示该组件的方法,但是我们可以通过正确的类型标注来辅助 TS 进行类型推断。子组件 CheckBox.vue<...
2024-07-31 11:53:34
251
原创 Canvas 绘制渐进式圆头圆环图
移动端 native 效果图当前项目大量 Web 需求,目前需要将 native 的效果同步到 Web,一顿百度各种图表库,F2·移动端可视化引擎 | AntV (antgroup.com)Apache ECharts一顿百度,发现添加圆头很麻烦,也没找到如何解决,最后只能用 canvas 自己来绘制了Tab-环形图 (online-video-cutter.com).gif...
2024-04-09 15:43:26
241
原创 Android 底部按钮被软键盘顶起问题解决
我们目前的项目是采用单 Activity 多 Fragment 的架构模式, AndroidManifest.xml 内 MainActivity 的配置如下所示。<activity android:name=".MainActivity" android:exported="true" android:window...
2021-12-05 22:28:16
5440
原创 同步 IO 和异步 IO
在 linux 中对 io 操作就是把内核态准备就绪的数据拷贝到用户态。啥是内核态呢,内核态就是 linux 内核,用户态则是用户进程中的某个线程,即 io 操作其实就是内核态和用户态的切换。io 操作大致分为两种:文件 io网络 ioio 操作分为两步发起 io 请求接收处理 io同步 io 和异步 io 最大的区别就是同步 io 的发起方(用户线程)会阻塞或轮询等待 i...
2021-11-25 11:08:15
2909
原创 Android TextView 仿动控件
看到一些应用中的点赞觉得挺有意思,具体效果大概就是这个样子50buq-l34h1.gif然后我仿写了下,效果差不多,代码比较简单就不过多说明了import android.animation.Animator;import android.animation.AnimatorListenerAdapter;import android.animation.ObjectAnima...
2021-11-16 11:49:59
2064
原创 Java Lambda 和 Kotlin Lambda 的区别
Java 匿名内部类在编译时会创建一个 class ,增加类的加载开销,运行时该内部类无论是否用到外部参数每次都会生成该类的实例。jdk 1.8 后 lambda 的实现是在当前类增加一个私有静态方法,减少了类的开销Kotlin 匿名内部类的实现和 Java 一致也是在编译期生成一个 class,lambda 的实现也是同样创建一个 class,但是该 class 继承 Lambda 类并实现了...
2021-09-30 08:07:21
463
原创 Android 垂直同步和三重缓冲
帧率是每秒钟内游戏能够渲染的画面数量,取决于电脑的硬件配置。屏幕刷新率是屏幕在每秒钟能刷新的次数,单位是赫兹(Hz),这取决于显示器的硬件配置。假设CPU/GPU 性能高在你的游戏中能够获得超过200帧的画面,但是由于显示器刷新率只有30Hz,只能“抓取”其中的30帧进行显示,最终你所看到的画面也是30帧。屏幕刷新率越高,你在每秒钟内就能看到越多的画面,因此对你来说,画面也就更加“流畅”、“清晰”。一个页面的渲染流程大致分为一下几步,CPU 将界面处理对应的图形数据,然后GPU 将图形数据栅格化,最后屏
2021-07-19 13:55:04
1438
原创 Kotlin inline 和 reified
inline 即方法内联,这并非 Kotlin 所独有的特性,JVM 在程序编译的时候就会对短小并调用频率高的方法进行优化内联,这样来提高应用的执行效率,值得注意的一点,内联的预期性能影响不大,内联最适用于具有函数类型参数的函数。reified 字面意思是具体化,其作用是防止泛形擦除,使得编译后的字节码仍然保留其真实类型inline fun <reified T: Activity> Activity.launchActivity(bundle: Bundle? = null){ v
2021-07-19 13:53:08
703
原创 Kotlin contract 契约
Kotlin 的赋值智能推断可以根据值的类型来转化,但是对于函数就没有那么“智能”了fun String?.isNotNull():Boolean { return this != null && isNotEmpty()}fun printLength(s:String?=null) { if (!s.isNotNull()) { // Only safe (?.) or non-null asserted (!!.) calls are allow
2021-07-19 13:52:10
152
原创 Kotlin StandardKt
TODO 往往出现在子类实现抽象父类时被重写的抽象方法内,如果方法不重写就必须将 TODO 去除,否则会抛出异常// Always throws NotImplementedError stating that operation is not implemented.@kotlin.internal.InlineOnlypublic inline fun TODO(): Nothing = throw NotImplementedError()/** * Always throws [NotI
2021-07-19 13:51:21
125
原创 Kotlin CallBack 如何更具 Kt 风味
在 Kotlin 项目中需要对输入框进行监听时需要写如下监听事件,这不跟 Java 几乎一样嘛,这可一点也不 Kotlinbinding.etLoginName.addTextChangedListener(object: TextWatcher{ override fun beforeTextChanged(s: CharSequence?, start: Int, c...
2021-07-19 11:24:05
272
原创 Kotlin 类扩展实现原理
在 Kotlin 中当项目集成第三方 SDK 的时候,如果需要为其中某个类新增方法来可以通过 className.methodName(){}, 即 类名.方法名 的形式来扩展函数,那么同样和 Java 一样是 JVM 语言的 Kt 为什么就可以实现这种功能呢,以下为一个例子,借助它来详细探讨一下实现原理及细节。open class Father { //定义成员函数 open ...
2021-07-19 10:34:32
201
原创 Java 泛型通配符及上下边界
上界<? extends T>不能往里存,只能往外取,下界<? super T>往外取只能赋值给Object变量,不影响往里存。很多博客论点都是上界<? extends T> 无法确定它是 T 类型还是 T 的子类,无法确定具体类型,所以在存入的时候无法判断类型一致,而下界<? super T> 可以确定是 T 类型或 T 的父类故可以存入,但是取...
2021-06-11 17:23:26
250
2
原创 Android N 边形 View
需求千奇百怪,对于登录后账户的头像,要求圆形、多边形、带描边、带 VIP 标示等等,所以实现一个 N 边形玩玩,效果和代码如下。多边形各顶点计算公式如下:(1)正多边形的中心点为(0,0)for (i = 0; i < n; i++) { printf("%f %f\n", r * Math.cos(2 * Math.PI * i / n), r * Math.sin(2 * Ma...
2021-05-24 14:47:47
89
原创 Kotlin 和 Java 关于局部变量的区别
众所周知,在 Java 方法内将局部变量作为参数传递到方法后,如果该参数是基本数据类型,那内部的赋值修改不会同步到外部,如果是引用数据类型,对于对象的赋值也是不会同步到外部的,但是对于对象的属性修改是会同步的,这是因为 Java 是值传递,修改的是副本,但是副本指向的属性地址是相同的。Java 基本数据类型的局部变量作为参数传递到方法public class Test { public...
2021-05-13 17:25:44
137
原创 Kotlin lazy 实现原理
/** * Creates a new instance of the [Lazy] that uses the specified initialization function [initializer] * and the default thread-safety mode [LazyThreadSafetyMode.SYNCHRONIZED]. * * If the initia...
2021-05-10 11:33:03
429
原创 Android 原生 ImageSpan 垂直局中及左右边距问题解决
关于Android 原生 ImageSpan 无法设置垂直局中及左右边距问题,找了很多博客,均无效或者有 bug,只能自己动手了,代码经测试有效。package com.example.myapplication;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Rec...
2021-04-29 20:51:15
492
1
原创 近期的感悟
1、先要观察,然后才能"采取行动"。这个采取行动是指你接下来做事的方式,因为新公司的项目比较大,然后协作开发的人特别多,同时开发之间的水平也是参差不齐的,每个人的代码风格也是一样,有的时候有些特别有问题的代码我最开始是会直接指出来的,因为作为一个整体,大家以后维护这种代码是特别麻烦的,尤其的写内存泄露的代码和无脑堆砌代码,但是奈何说了没用,这种东西估计要领导重视去主动推才行,后面我也感觉其他人 ...
2021-02-03 22:31:51
67
原创 Android 性能优化
1.什么是性能优化百度百科:性能优化(Optimize)简而言之,就是在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短。维基百科:大多数系统会响应增加的负载而导致性能会有一定程度的下降,修改系统以处理更高负载就是性能优化。总结就是,提高负载能力让程序运行更快,用更少的资源做更多的活就是性能优化。2.为什么要性能优化随着科技不断发展、移动互联网的迅猛发...
2019-11-19 17:53:45
112
原创 Android AIDL 跨进程通信
安卓 IPC 跨进程通信有很多种方式,我们可以用 Bundle传递数据,通过 Intent 意图去打电话,在 Uri 里面传递电话号码//手动拨号将Intent.ACTION_CALL改为Intent.ACTION_DIAL Intent intent = new Intent(Intent.ACTION_CALL); Uri data = Uri.parse("...
2019-08-11 22:48:58
111
原创 Linux中IO多路复用机制
之前的面试有问到主线程在 ActivityThread 里初始化 Looper 后调用了 Looper.loop() 这个死循环为什么不会阻塞主线程,当时回答因为在 Looper.loop() 方法里调用了 MessageQueue.next() 方法,这个 next() 中调用了nativePollOnce() ,这个本地方法最终实现是 android_os_MessageQueue_nativ...
2019-08-04 13:35:58
103
原创 记近一个礼拜的面试
第一家公司,租房类,10k-13k(以下所有公司名字省略)1、组件化怎么做的2、热修复原理3、增量更新原理4、安卓性能优化5、设计模式、架构模式MVP MVVM后面还上机做了一个东西,给一个设计图,两个小时内尽量高还原度,一天后收到复试谈工资,婉拒了没有去,公司比较小,非技术型公司,然后技术氛围不行第二家公司,做电视机顶盒,10k-20k上来先做了一套笔试题,大概一些Java和An...
2019-08-01 17:10:19
100
原创 OkHttp3.0 拦截器、调度器源码解析
聊一个框架的源码,我们先从它的用法说起,通过OkHttp来请求网络一般不外乎通过以下两种方式 :1、异步回调网络请求OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url("https://github.com/hongyangAndroid").build();...
2019-07-16 15:15:20
119
原创 Error: Java exception was raised during method invocation
项目中有用到 @JavascriptInterface 来JS 、Java 通讯,但是 H5 报了一个异常,我在一个通讯方法里申请动态权限,后发现需要切换到主线程才行,其实是所有的 UI 操作都要切换到主线程,否则会抛出异常,后改为以下代码解决问题private void downLoadGame(String AppGameJsonStr) { L.e("AppGameJson...
2019-06-14 17:54:27
858
原创 关于安卓自定义 View 设计的坑点漫谈
今天遇到一个问题,有测试反馈移动端 H5 页面点击输入框软键盘不弹起,然后我检查了一下代码,JS是开启了,焦点也默认获取,但是确实是点击没反应,后来发现是自定义 webview 的构造方法出了问题public X5WebView(Context arg0) { this(arg0, null); } @SuppressLint("SetJavaScriptEn...
2019-06-11 11:12:53
62
原创 RxJava 学习笔记总结(一)
1、合并操作符zip操作符是把多个可观察的管道来合并消息到一条管道来处理,并可以对合并的消息进行格式处理,总的消息数量由最少的那一条管道决定。常见的运用场景比如一个消息页面需要用到两台服务器的查询请求,这样我们就需要通过查询两个接口来合并数据最后渲染UI。Observable<Integer> observable1 = new Observable<Integer>...
2019-05-25 11:30:40
59
原创 Java中 private、protected、public 和 default 的区别
该文章为转载,点击进入原作者public:具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。protected:主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西default:有时候也称为friendly,它是针对本包访问而设计的,任何...
2019-05-08 11:21:12
44
原创 将博客搬至CSDN
/** * 日志输出工具类 */public class L { private static final String TAG = "LOGFILE"; private L() { // 设置不允许被实例化 throw new UnsupportedOperationException("cannot be instantiated");...
2019-04-28 15:19:57
45
原创 Java 参数传递是值传递还是引用传递?
首先把结论表明,Java 的参数传递是值传递,因为有部分细节让人引起误解以为是引用传递,故我们写两个例子来举例探讨。public class ExampleUnitTest { @Test public void addition_isCorrect() { assertEquals(4, 2 + 2); int a = 10; S...
2019-04-27 13:32:54
104
原创 可能是全网最简单透彻的安卓子线程更新 UI 解析
相信下面的代码大家看过很多遍了,在 onCreate() 生命周期里开启一个线程来更新 UI ,居然没有闪退和异常( 在大概率情况下是没有问题的 )@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCon...
2019-04-24 12:04:34
143
原创 Android 状态切换控件 EasyStateView
效果 GIF简单介绍一下这个控件,像我们在实际的开发过程中,经常性的会遇到这样的场景,比如进入一个页面先出来加载动画,然后请求数据,如果网络异常就显示网络异常的布局,数据异常、数据为空也有相应的布局,以及当我们请求成功完毕数据后,根据返回的数据值去区分不同VIP等级的用户显示不同的页面,这里我放了两张图,我的女神,迪丽热巴和俞飞鸿,就当做我们在业务开发中的 Layout ,把布局全部写在...
2019-04-11 10:39:33
110
原创 Process 'command 'E:\androidStudioSpec\jre\bin\java.exe'' finished with non-zero exit value 1
一个非常离奇的 bug , Google 许久无果,看到 stackoverflow 有个回答是设置 dex 分包的配置,猜想可能是和 dex 分包有问题,果断删除以下的 dex 分包配置,果然运行成功。dexOptions { javaMaxHeapSize "4g" preDexLibraries = false additionalParameters += ...
2019-04-01 16:24:55
573
原创 Bugly 热修复踩坑记录
2019-03-29 09:38:35.108 435-435/? W/Layer: [Splash Screen com.rzj.zhongshi#0] opaque layer with plane alpha:0.83 cannot be handled by hwcomposer2019-03-29 09:38:35.116 31808-31808/? W/Tinker.Tinker: ...
2019-03-29 15:13:01
245
原创 对于Android业务开发的一些理解总结
关于 PopupWindow ,很多博客有谈到利用 Builder 设计模式的链式写法,以下是我项目中的类似写法/** * 显示选择性别 */ private void showGenderPopWindow() { if (null == genderPopupWindow) { CommonPop.Builder build...
2019-03-11 17:18:31
72
原创 Android面向切面AOP架构设计后续补充
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.annotation.Annotation java.lang.reflect.Method.getAnnotation(java.lang.Class)' on a null object reference这个报错是 AOP release ...
2019-01-03 09:48:29
53
原创 AndroidStudio xml代码无提示且预览页面空白解决方案
Finally, deleting .idea folder and all .iml files from the project, restarting Android Studio and rebuilding gradle did the trick. Autocomplete in XML support library is working again.Probably checki...
2018-12-24 14:41:10
254
2
原创 :app:transformDexWithDexWithInstantRunDependenciesApkForDebug
Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformDexWithInstantRunDependenciesApkForDebug'. at or...
2018-12-12 14:44:23
111
原创 菜鸡的MVP架构漫谈
相信大家在网上看过关于MVP架构的博客数不胜数,至于MVP到底是什么,也不需要我再从百度百科复制一遍了,通俗的说MVP就是解决Model和View的耦合,没有使用架构的代码就是一个Activity里处理了UI逻辑、网络请求等等,有的时候一个Activity五六百行,我曾经看过同事的一个适配器上千行,因为业务逻辑过于复杂,说了这么多,MVP到底有什么作用呢?我们非用不可吗,MVP可以把"功能"抽离出...
2018-11-29 16:10:53
78
原创 Android 仿UC浏览器详情页评论弹框效果
大概就这种效果额,突然发现UC被我卸载了,这个是QQ浏览器的效果,不过都一样,如果当前页面不是全屏的话,把根布局设为相对布局,然后设置评论布局为处于底部,这样在点击评论时弹开键盘会触发布局重绘,底部的评论也会处于软键盘的上方,键盘消息,布局下移,但是我们要说的是全屏的情况下我们如何处理。首先要监听到软件盘弹起,然后再设置评论的popupWindowimport android.ap...
2018-11-29 12:02:50
133
原创 安卓7.0在线更新解析包时出现问题
关于7.0行为变更,FileProvider应用共享文件的问题可以看鸿洋大佬的这篇博客https://blog.csdn.net/lmj623565791/article/details/72859156但是我遇到的这个问题是明明有授权临时权限,FileProvider的XML也有写,但是在下载apk后解析安装包出错,后面回顾一圈代码发现,有问题。if (Build.VERSION.SDK_I...
2018-11-14 15:51:58
48
Java中文版api
2018-05-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人