XYH Blog

一板一眼就会滋生弱点

Coroutines Flow

Coroutines Flow小记

Flow Flow的出现是为了解决挂起函数只能返回一个返回值的问题,Flow支持返回一个”流”,可以理解为可以返回多个异步处理的结果。 创建一个Flow 创建flow的方式在Builders.kt中,主要有以下: 最基本的创建方式: 1 2 3 4 5 val mFlow = flow { emit(1) emit(2) emit(3)...

记一次Google Play上架遇到的问题

Google Play上架问题

前言 开发的直播项目VoLive在上架Google Play的时候被拒了2次,记录这2个问题。 SSL Error Handler 第一次上架的时候被拒绝,然后邮件告知: 问题:WebView遇到SSL错误应该告知用户,让用户处理是否继续或退出。 分析:问题代码出现在WebView重写WebViewClient#onReceivedSslError(view: WebView?...

Android MotionLayout

MotionLayout小记

前言 最早19年的时候在Youtube上看到Google的视频说过MotionLayout,当时看到第一感觉就是很酷,能用xml来描述两个布局切换的过程,还能定义关键帧,最近有时间来好好研究一下。 什么是MotionLayout Motion代表动作,说明MotionLayout处理布局之间的“运动”,这样说不够贴切,准确来说应该是处理布局之间的转换(比如从布局A切换到布局B的一个转换...

Android Q深色模式

关于深色模式的一些简记

前言 一篇晚来的记录,其实应该在3月份就可以整理出来,可还是疫情的原因,让原本就不轻松的工作变得更加繁忙起来,虽然也想过以后不写这些东西了,可是等若干年回头看,自己曾经写过的东西何尝又不是一种奇妙的感觉呢。 正文 在Android Q及更高的版本,Google提供了深色模式(或者叫夜间模式?),我最早在用网易云音乐、B站的时候就体验过了夜间模式,后来B站也把他们的方案开源了,Magic...

设计模式-单例模式

Singleton模式

wiki百科 单例模式,也叫单子模式,是一种常用的软件设计模式,属于创建型模式的一种。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。 优点: 内存只有一个实例,节约内存。 避免对资源的重复占用。 缺点: 没有接口,不能继承,与单一职责原则冲突。 单例实现方法: 懒汉...

设计模式-工厂模式

Factory模式

工厂模式 -wiki百科 工厂方法模式(英语:Factory method pattern)是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。” 优点: 屏蔽了类的实现过程,用户...

设计模式-Builder模式

Builder模式

-wiki百科 生成器模式(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 在Android SDK里有很多地方也使用了Builder模式,如经典的AlertDialog#Builder。 优点: 建造者独立,易扩展。 ...

设计模式-适配器模式

适配器模式

-wiki百科 在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(英语:wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将类自己的接口包裹在一个已存在的类中。 比如在Android SDK中经典的BaseAdapter,同时满足ListView跟Spinner获取Item...

仿抖音时钟

一款类似抖音时钟的自定义View

前言 最近在抖音上看到的一个效果,觉得蛮好玩的,于是想着自己写一个,顺便复习一下自定义View。 效果图 思路 该效果稍微麻烦一点的就是3个圈的旋转控制,其余都是基础的绘制内容。 绘制中间文本(时间、日期、星期) 绘制时钟圈 绘制分钟圈 绘制秒钟圈 旋转 绘制选中框 绘制比较简单,通过canvas.rotate()旋转绘制时分秒,其中需要计算的点是时、...

编译ijkplayer

Ubuntu编译ijkplayer

编译ijkplayer 鉴于公司即将开始的直播APP开发,对市面上主流播放器进行了考究之后决定采用Bilibili开源的ijkplayer作为播放器,本文记录如何在Ubuntu下编译ijkplayer,Windows安装虚拟机的教程可以参考这里。 环境准备 本次编译需要的环境如下: JDK SDK NDK Git Make vim yasm JDK 在U...