- 博客(28)
- 收藏
- 关注
原创 安卓相机全屏预览方案
2、分辨率的话根据手机屏幕大小,选择相机硬件中提供的最合适的分辨率,根据分辨率修改srufaceview的宽度或高度(此时总有宽或高总有一个会超出屏幕,不用担心,因为srufaceview居中放在了framelayout中,会裁切)1、预览用srufaceview,外部可用framelayout(方便添加ui),srufaceview居中。在SurfaceView的onMeasure中,根据相机预览尺寸计算。这样就实现了充满屏幕、无黑边、无变形的预览效果。根据屏幕尺寸,从相机支持的预览尺寸中选择宽高比。
2026-01-26 13:25:36
162
原创 Android ScrollView嵌套RecyclerView 导致RecyclerView数据展示不全问题
异常表现:RecyclerView绑定的数据源数量(日志确认正确)与界面显示数量不一致,且显示条数随数据量随机变化(3 条显 2 条、4 条显 1 条、5 条显 3 条),仅部分数据能展示。布局初始结构:外层用ScrollView包裹包含两个CustomBlogCardView(内部均含RecyclerView)的LinearLayout。关键修复动作:将外层ScrollView替换为NestedScrollView后,所有数据均能完整显示,问题彻底解决。
2025-09-12 14:32:47
811
原创 AAR包与Jar包的区别
总结:Jar包是通用Java代码容器,AAR包是Android专用的“增强版Jar”,包含更多平台相关资源,专为Android组件复用设计。
2025-09-07 16:38:55
535
原创 移动端轻量级神经网络推理框架
简单说,Paddle Lite 是“Paddle 生态专属优化工具”,ncnn 是“通用轻量跨框架工具”,两者各有侧重,需根据模型来源和部署需求选择。,核心目标是让深度学习模型在资源受限的设备(如手机、物联网设备)上高效运行,但两者在设计理念、生态支持、适用场景等方面有显著区别,并不完全一样。ncnn 和 Paddle Lite 都是针对移动端和嵌入式设备优化的。
2025-07-21 17:16:58
526
原创 AndroidX中ComponentActivity与原生 Activity 的区别
AndroidX 是原生框架的升级替代:提供更丰富的功能(如 Lifecycle 支持)和更好的兼容性,推荐优先使用。是当前 Android 开发中实现 Activity 的首选。
2025-07-18 15:59:05
759
原创 安卓ActivityResultLauncher
简单来说,ActivityResultLauncher 是 startActivityForResult 的升级替代方案,解决了其生命周期管理混乱、代码耦合等痛点。
2025-07-09 11:20:32
1057
原创 Gradle打包流程
因此本质上都是面对对象的,面向对象的特点是一切皆为对象,所以,在gradle里,.gradle脚本的本质就是类的定义,一些配置项的本质都是方法调用,参数是后面的{}闭包。比如build.gradle对应Project类,buildScript对应Project.buildScript方法。DSL也就是Domain Specific Language的简称,也就是领域特定语言,是为了解决某一类任务专门设计的计算机语言。自动化构建工具,通过组织一系列task来最终完成自动化构建的。三部曲:初始化、配置、执行。
2025-06-19 18:20:33
989
原创 安卓JetPack篇——Livadata
LiveData 是会自动更新 UI 的数据容器,省去手动管理数据与界面同步的麻烦。 对比handler需要手动管理,否则会内存泄漏。使用观察者模式并配合LifeCycle,在数据变化时自动通知处于活跃状态(如STARTEDRESUMED)的 UI 组件更新,并在 UI 销毁时自动解除观察,避免内存泄漏。
2025-06-19 16:04:45
440
原创 安卓JetPack篇——LifeCycle原理
具备宿主生命周期感知能力的组件。它能持有组件(如Activity或Fragment)生命周期状态的信息,并且允许其他观察者监听宿主的状态。
2025-06-19 14:53:13
673
原创 recyclerview嵌套recyclerview造成滑动卡顿
当垂直滚动的时候, 内部RecyclerView中的每个view再次inflate了一遍,所以感觉很卡顿。这是因为每个嵌套的 RecyclerViews 都有各自的 view pool。假设外层 RecyclerView(A)有 3 个 Item,每个 Item 包含内层水平 RecyclerView(B)耗时对比:独立 Pool 需 10ms 创建 View,共享 Pool 仅需 1ms 绑定数据。同样外层 A 滑动,Item1 滑出、Item4 滑入,但内外层共享同一个 View Pool。
2025-06-19 01:23:44
687
原创 Glide缓存机制及对比
使用弱引用缓存,存储当前正在使用的图片,避免被LruCache回收,导致空指针异常;当图片不再显示(不被imageview强引用引用)时,用过弱引用+引用队列把这个不再显示的对象放入lrucache中。Q:为什么使用弱引用缓存,而不是用强引用和软引用?A:强引用页面关闭后图片仍被强引用使用,内存泄漏;无法被LruCache管理导致缓存体系失效。软引用直到OOM边缘才进行回收,低端设备频繁GC卡顿。**2、内存缓存(LruCache):**存储最近使用但未被引用的图片。(默认占App内存的1/8)
2025-06-18 13:50:50
1147
原创 从Java线程模型到Kotlin协程
这段话很好理解,因为Java一对线程模型是Java线程(用户线程)会直接映射到一个内核线程(操作系统管理的线程),当涉及到IO阻塞等需要操作系统内核介入的操作时,会导致用户态和内核态的切换,当大量线程频繁切换时,内核调度器的负载会增加,导致整体系统效率下降。简单来说,n个协程运行在线程池中,协程的挂起和恢复不会导致线程池里线程的阻塞和唤醒,所以不会导致用户态和内核态的切换,所以效率高,也就是协程解耦了传统的1:1的绑定关系。
2025-06-17 11:35:22
381
原创 Flutter三棵树机制
• Widget树:设计师画的装修图纸(描述客厅放沙发、卧室放床),每次改需求(如换沙发颜色)会重新画图纸,但图纸本身不花钱。◦ 每次状态更新时,Widget树会被重新构建(因为Widget是不可变的),但这一步只是生成新的配置,成本很低。• Element树:施工队长,拿着图纸对比旧房现状,决定哪些地方要改(比如只换沙发,不拆墙),规划最小施工量。◦ 作为中间层,它缓存Widget的配置,并对比前后两次Widget树的差异(即“找不同”)。◦ 负责计算布局、绘制像素,是真正和屏幕渲染打交道的层。
2025-06-07 22:51:27
470
原创 安卓原生+Flutter混合开发 DAY1
第一步安装flutter环境就不再赘述了,网上有很多教程了。目前都是原生 + Flutter的项目结构较多,那么假设咱现在有一个原生的项目,想要把flutter加进来,怎么办呢?
2025-05-29 10:49:37
709
原创 HTTPS安全的原因
2、在我们的客户端或者浏览器会有根证书,客户端(如浏览器、手机)内置 根证书列表(预装或系统更新时添加),包含全球知名 CA 的根证书。3、当服务器出示由某 CA 签发的服务端证书时,客户端会从该证书追溯到其上层 CA 的证书,最终通过根证书验证整个链条的合法性。握手阶段通过 非对称加密(如 RSA、椭圆曲线加密 ECC)协商出 会话密钥(对称加密密钥),并验证服务器身份。会话密钥生成(对称加密的密钥):客户端生成预主密钥,用公钥传给服务端。HTTPS是在HTTP的基础上增加了SSL/TLS加密。
2025-05-28 15:29:26
317
原创 安卓studio新建项目加载过慢
阿里云镜像 Gradle下载地址:https://mirrors.aliyun.com/macports/distfiles/gradle/腾讯镜像 Gradle下载地址:https://mirrors.cloud.tencent.com/gradle/官网地址:https://services.gradle.org/distributions/阿里:https://mirrors.aliyun.com/gradle/
2025-04-16 15:09:14
430
原创 Vue-cli
Vue-cli简介:vue-cli是vue官方提供的用于搭建基于vue+webpack+es6项目的脚手架工具操作npm install -g vue-clivue init webpack "名称"cd 名称npm install(安装项目的依赖)npm run dev(启动项目)访问:localhost:8080...
2021-01-07 21:56:32
179
原创 flask点赞功能实现
一、思路将用户id,评论id,评论所在的文章id单独存放在数据库一个表中。点击前端界面的点赞按钮,将数据通过js传送给后台,在后台判断该用户是否已对该评论点赞。通过ajax将信息异步提交到前端。二、遇到的坑1.由于项目是异步加载评论区,导致在异步提交评论后,点击点赞事件后会出现csrf missing。解决方案:在点赞功能视图加上@csrf.exempt...
2019-08-17 20:08:24
1983
原创 ajax异步提交form表单
一、前言在web开发中,经常会遇到:提交表单后无需更新页面并将新的数据展示在页面上,这就需要使用ajax提交form表单的方式进行提交。二、方法(以flask框架为例)2.1、前端部分1.form表单只需要写一个id值与js进行数据交互2.(坑一)若开启了crsf防护,记得加上:3.(坑二)要在button标签中加上 type=“button”,不能为空(会将表单数据显示在地址栏)...
2019-08-15 23:23:45
674
原创 关于flask实时更新评论区的解决方法
评论后自动更新评论区1.前言在写评论部分时,每当评论后都不能实时显示新增的评论 ,必须刷新页面才可以。为了解决这个问题:1.1思路1(行不通)首先想到的是ajax异步提交评论,然后通过后台获取更新后的评论列表加载到评论区,但是在写代码的过程中遇到了一个问题:不知道ajax如何从后台获取列表并将查询到的列表迭代显示到前端,于是放弃了这个方法。1.2(可行)之后又想能否通过view视图返...
2019-08-13 20:43:46
765
1
原创 Thymeleaf整合到Spring Security,标签sec不起作用
将pom的thymeleaf-extras-springsecurity4改成thymeleaf-extras-springsecurity5,完美解决问题。 org.thymeleaf.extras thymeleaf-extras-springsecurity5 同时,还要在相应的页面也要进行修改。...
2019-04-29 23:54:55
2110
1
原创 关于IDEA自动创建Test类,方法未能显示的问题
今天听视频的时候看到了老师自动创建Test类,便也想试,(按ALT+ENTER 或者 ctrl+shift+t自动创建Test)结果里面的方法却显示不出。查了一下发现一个比较实用的方法,现在记录下这个方法:把public interface AreaDao {}改成public class AreaDao {}然后点击AreaDao自动生成test单元测试,最后再把class改回i...
2019-03-19 08:53:32
7436
9
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅