Android

微前端架构ModuleFederationPlugin源码解析

2022-11-01
目录 序言 背景 MF 基本介绍 应用场景 微前端架构 服务化的 library 和 components ModuleFederationPlugin 源码解析 入口源码 Exposes Remotes Shared 小结 总结 序言 本文是 Webpack ModuleFederationPlugin(后面简称 MF) 源码解析 文章中的第一篇,在此系列文章中,我将带领大家抽丝剥茧.一步步地去解析 MF 源码.当然为了帮助大家理解,可能中间也会涉及到 Webpack 源码中的其它实现,我会根

Android图片框架Glide原理深入探索

2022-10-31
目录 with load into 原理总结 缓存 LruCache 首先引入依赖 implementation 'com.github.bumptech.glide:glide:4.12.0'    annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' 下面一行代码,就是Glide最简单的使用方式了 Glide.with(this).load(url).into(imageView) with 首先,我们来看with,其

Android动效Compose贝塞尔曲线动画规格详解

2022-10-31
目录 正文 贝塞尔曲线 解析动画曲线 曲线源码分析 总结 正文 写Compose动画的时候使用animateXAsState的时候会注意到一个参数——animationSpec,如下: val borderRadius by animateIntAsState( targetValue = if (isRound) 100 else 0, animationSpec = tween( durationMillis = 3000, easing = LinearEasing ) ) 此处就不深入探

Android自定义View绘制贝塞尔曲线实现流程

2022-10-31
目录 前言 二阶贝塞尔曲线 三阶贝塞尔曲线 前言 对于Android开发,实现贝塞尔曲线还是比较方便的,有对应的API供你调用.由于一阶贝塞尔曲线就是一条直线,实际没啥多大用处,因此,下面主要讲解二阶和三阶. 二阶贝塞尔曲线 在Android中,使用quadTo来实现二阶贝塞尔 path.reset() path.moveTo(startX, startY) path.quadTo(currentX, currentY, endX, endY) canvas.drawPath(path, cur

Flutter状态管理Bloc使用示例详解

2022-10-31
目录 前言 两种使用模式 Cubit模式 最后 前言 目前Flutter三大主流状态管理框架分别是provider.flutter_bloc.getx,三大状态管理框架各有优劣,本篇文章将介绍其中的flutter_bloc框架的使用,他是bloc设计思想模式在flutter上的实现,bloc全程全称 business logic ,业务逻辑的意思,核心思想就是最大程度的将页面ui与数据逻辑的解耦,使我们的项目可读性.可维护性.健壮性增强. 两种使用模式 首先第一步引入插件: flutter_bl

Android自定义view实现滚动选择控件详解

2022-10-31
目录 前言 需求 编写代码 主要问题 前言 上篇文章通过一个有header和footer的滚动控件(Viewgroup)学了下MeasureSpec.onMeasure以及onLayout,接下来就用一个滚动选择的控件(View)来学一下onDraw的使用,并且了解下在XML自定义控件参数. 需求 这里就是一个滚动选择文字的控件,还是挺常见的,之前用别人的,现在选择手撕一个,核心思想如下: 1.有三层不同大小及透明度的选项,选中项放在中间 2.接受一个列表的数据,静态时显示三个值,滚动时显示四个

Android MQTT与WebSocket协议详细讲解

2022-10-30
目录 MQTT WebSocket 总结 MQTT MQTT是一个极其轻量级的发布/订阅消息传输协议,对于需要较小代码占用空间或网络带宽非常宝贵的远程连接非常有用 有如下特点: 开放消息协议,简单易实现: 发布订阅模式,一对多消息发布: 基于TCP/IP网络连接,提供有序,无损,双向连接: 1字节固定报头,2字节心跳报文,最小化传输开销和协议交换,有效减少网络流量: 消息QoS支持,可靠传输保证. 添加依赖 maven { url "https://repo.eclipse.org/conten

Jetpack Compose惯性衰减动画AnimateDecay详解

2022-10-30
目录 什么是惯性衰减动画 惯性衰减动画 使用要点 block 监听 什么是惯性衰减动画 比如说我们玩微信的时候 手指一拉,微信的列表就会惯性滑动 ,这个滑动的速率当然是越来越慢的,最终停止, 这个其实就是惯性衰减动画的典型例子 那这个例子和animateTo 有啥区别呢? 一个速率变慢的动画 ,听起来似乎 我们用animateTo 设置一些参数也可以实现 其实这里最大的区别就是 animateTo 你是需要设置目标值的,也就是动画结束的那一刻 某个view属性的值 你必须明确指定 而所谓的惯性衰

Flutter之 ListView组件使用示例详解

2022-10-28
目录 ListView的默认构造函数定义 默认构造函数 ListView.builder ListView.separated 固定高度列表 ListView 原理 实例:无限加载列表 添加固定列表头 总结 ListView的默认构造函数定义 ListView是最常用的可滚动组件之一,它可以沿一个方向线性排布所有子组件,并且它也支持列表项懒加载(在需要时才会创建).我们看看ListView的默认构造函数定义: ListView({ ... //可滚动widget公共参数 Axis scrollD

Jetpack Compose自定义动画与Animatable详解

2022-10-27
目录 AnimationSpec 1.spring 2.tween 3.keyframes 4.repeatable 5.snap Animatable 本篇主要是自定义动画与Animatable. AnimationSpec 上一篇中,出现了多次animationSpec属性,它是用来自定义动画规范的.例如: fun Modifier.animateContentSize( animationSpec: FiniteAnimationSpec<IntSize> = spring(), fin

FFmpeg Principle学习new_video_stream添加视频输出流

2022-10-27
目录 new_video_stream() 函数流程 流程图 原因解析 滤镜出口里面获取宽高 new_video_stream() 函数流程 new_video_stream() 函数的流程相对来说比较简单,主要的逻辑如下: 1, 调 new_output_stream() 函数来创建 OutputStream 输出流,以及 AVCodecContext 编码器上下文. new_output_stream() 是一个公共函数,创建 音频流,数据流,字幕流都用了它. new_output_stre

Jetpack Compose常用组件详细介绍

2022-10-26
目录 1. Text 2. Image 3. LazyColumn 1. Text 日常最常用的应该就是显示文字,所以有必要说一下Text控件.首先源码如下: @Composable fun Text( text: String, modifier: Modifier = Modifier, color: Color = Color.Unspecified, fontSize: TextUnit = TextUnit.Unspecified, fontStyle: FontStyle? = nu

设置界面开发Preference&nbsp;Library数据重建机制详解

2022-10-26
目录 一.界面重建后设置项数据如何复原的? 1. onSaveInstanceState()保存数据 2. onRestoreInstanceState()恢复数据 二.Preference的销毁重建方法是如何收到通知的呢? 总结 一.界面重建后设置项数据如何复原的? 主要是介绍Preference Library的数据恢复机制(比如界面销毁重建)浅析. Prefernece基类给我们提供了两个方法: onSaveInstanceState():界面销毁之前提供保存数据的时机: onRestor

FFmpeg Principle分析Out put File 数据结构

2022-10-26
目录 struct OutputFile struct OutputFile 字段解析 struct OutputFile struct OutputFile 是单个输出文件的管理器.之前在 parse_optgroup() 处理好的 OptionsContext o 变量,有一部分字段会赋值给 OutputFile 管理器 如下: OptionsContext o 变量的另一部分字段,会在 open_output_file() 里面传递给 API 函数,例如:avformat_write_he

Jetpack Compose状态专篇精讲

2022-10-26
目录 1.remember 2.rememberSaveable 3.状态提升 4.状态管理 将Composable作为可信来源 将状态容器作为可信来源 将 ViewModel 作为可信来源 应用中的状态是指可以随时间变化的任何值.这是一个非常宽泛的定义,从 Room 数据库到类的变量,全部涵盖在内. 由于Compose是声明式UI,会根据状态变化来更新UI,因此状态的处理至关重要.这里的状态你可以简单理解为页面上展示的数据,那么状态管理就是处理数据的读写. 1.remember remembe

Jetpack Compose Canvas绘制超详细介绍

2022-10-25
目录 1. Canvas 2. 绘制方法 1. drawLine 2. drawRect 3. drawRoundRect 4. drawImage 5. drawCircle 6. drawArc 7. drawPath 8. drawPoints 3. DrawScope拓展方法 1. inset 2. translate 3. rotate与rotateRad 4. scale 5. clipRect 6. drawIntoCanvas 7. withTransform 4.参考 1. C

Android&nbsp;Binder&nbsp;通信原理图文详解

2022-10-22
目录 前言 1. Binder的作用 2. 进程与Binder驱动如何通信 3. ServiceManager进程的作用 Binder Client.Binder Server.ServiceManager关系 ServiceManager注册进Binder 4. 进程添加服务到ServiceManager的流程 其它进程找到SM 添加服务到ServiceManager BBinder作用 5. 进程从ServiceManager获取服务的流程 其它进程找到SM 从ServiceManager获

图解&nbsp;Kotlin&nbsp;SharedFlow&nbsp;缓存系统及示例详解

2022-10-18
目录 前言 replay extraBufferCapacity onBufferOverflow SharedFlow Buffer 前言 Kotlin 为我们提供了两种创建“热流”的工具:StateFlow 和 SharedFlow.StateFlow 经常被用来替代 LiveData 充当架构组件使用,所以大家相对熟悉.其实 StateFlow 只是 SharedFlow 的一种特化形式,SharedFlow 的功能更强大.使用场景更多,这得益于其自带的缓存系统,本文用图解的方式,带大家更

Flutter开发setState能否在build中直接调用详解

2022-10-11
目录 两种情况 原理分析 总结 两种情况 setState() 能在 build() 中直接调用吗?答案是能也不能. 来看一段简单的代码: import 'package:flutter/material.dart'; class TestPage extends StatefulWidget { const TestPage({super.key}); @override State<TestPage> createState() => _State(); } class _State

详解如何实现一个Kotlin函数类型

2022-10-11
目录 接口与函数类型 总结 接口与函数类型 业务开发中,经常会有实现一个函数式接口(即接口只有一个方法需要实现)的场景,大家应该都会不假思索的写出如下代码: interface Callback { fun response(): String } class Achieve: Callback { override fun response(): String { return "" } } 这么写当然没什么毛病,甚至为了让kotlin支持对接口Callback的SAM转换,你还可以