自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

知识应该共享,创造才应收费

尽我所能,尽我所知。

  • 博客(133)
  • 收藏
  • 关注

原创 Flutter开发之--初识Flutter

Flutter 是由Google公司研发的一种跨端开发技术,在2018年正式推出。Flutter自带Skia图形绘制引擎,采用自绘制的方式,不管是在Android还是IOS上,Flutter都统一使用Skia引擎进行绘制,因此两端的渲染过程完全一致,能够实现像素级别的双端一致性。在执行效率方面,众所周知,不管是哪个跨端框架,执行效率通常都是低于原生的。但是Flutter的执行效率接近原生。

2024-04-22 17:40:13 1114 1

原创 设计模式之创建型模式---工厂模式

工厂模式从名字就能看出,这种模式是用于创建对象的,因为现实生活中,工厂就是用于生产产品的嘛。所以工厂模式的名字起得非常的贴近生活。工厂模式根据应用场景的不同,分为简单工厂,工厂方法,和抽象工厂三种。现实生活中的工厂有的可以生产几种产品,客户根据工厂提供的产品定制就行。比如生产A,B两种品牌的车。这种情况对应到工厂设计模式中就是简单工厂模式。用户只需要给工厂说我要A或者B品牌的车就行。

2024-04-19 11:57:18 916

原创 Android JetPack Compose+Room----实现搜索记录功能

搜索功能是很多APP都会重点维护的功能,因为搜索功能可以很好的帮助用户找到自己需要的内容,与此同时,为了增强用户体验,引入了搜索记录的功能,本文就是介绍一个基于Compose+Room搜索记录功的实现

2024-04-16 22:09:59 1181

原创 设计模式之创建型模式---建造者模式

建造者模式是一种广泛使用的设计模式,在三方开源库和各种SDK中经常见到。建造者设计模式在四人帮的经典著作《设计模式:可复用面向对象软件基础》中被提及,它的定义为,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式目前主要有两种,一种是经典的建造者模式,另外一种是变种的建造者模式。本文就是介绍建造者模式的两种形态的Java实现。

2024-04-09 21:15:54 1229

原创 Android自定义View 实现一个带音效和震动的SeekBar

SeekBar的出现是为了方便用户设置值,用户通过滑动然后就可以设置值,系统提供了一个SeekBar,但是不太美观用户体验也不好,所以本文介绍了设计一个带音效和震动效果的SeekBar,增强用户体验

2024-03-23 18:23:51 653 1

原创 使用Android Native Hook技术解决VLC播放器闪退的问题

在做公司的一个TOB的需求时,发现调起Unity提供的3D播放器播放网络在线视频时闪退了,然后就拉着相关部门的人一起分析问题,最后定位到是VLC里面用到的系统日志打印函数在部分的系统上会出问题,于是各部门的同事就开始想各种解决方案,当时主要是两个部门的同事提出了两种解决方案,一方面是系统部门的人提出直接在系统上改,因为ROM是我们自己的所以可以改系统的代码。禁用掉日志打印函数中引发闪退的部分,但是这样就会导致其他APP使用这个日志打印函数时就无法获取到日志了。但也不失为一个解决办法。

2024-03-04 20:35:33 1015 2

原创 Android AOSP源码研究之万事开头难----经验教训记录

做了四五年的android应用层开发后,想研究下底层源码的实现,所以想下载源码研究下,但是万事开头难,源码下载的过程非常坎坷,我使用的是双系统(ubantu 和windows),主机的固态只有1TB,而android的源码下载完一个版本也有几百个G。所以我想到了使用移动硬盘来保存下载的Android源码。也就是这个决定,让我折腾了两个多月。所以本文主要介绍整个下载源码编译到刷机的教训。

2024-02-08 00:47:52 1350

原创 Android Jetpack Compose 沉浸式状态栏的实现

说到沉浸式状态栏,很多小伙伴可能不太熟悉,其实让Android的状态栏的颜色和APP的主题颜色相同,给人感觉状态栏和APP就是一体的。沉浸式的状态栏让页面看起来更舒服,实现沉浸式状态栏也很简单,首先就是配置主题,然后设置状态栏的颜色,之前的博客中实现沉浸式状态栏是通过将状态栏的颜色设置成页面背景的颜色,这样状态栏就和背景融为一体了,但是这种办法在每个页面都需要设置一遍,非常废了,最好的 方式就是将状态栏设置成透明的颜色,然后将我们的页面"顶"到屏幕的顶部,而不是位于状态栏下面。

2024-02-05 13:18:26 1596 10

原创 Android Jetpack Compose之底部导航栏的实现

写过一段Android jetpack compose 界面的小伙伴应该都用过Compose的脚手架Scaffold,利用它我们可以很快的实现一个现代APP的主流界面架构,即一个带顶部导航栏和底部导航栏的界面架构,我们基于这个架构可以快速的搭建出我们想要的页面效果。而今天的文章就是要介绍如何实现一个有特点的底部导航栏。

2024-02-01 14:58:18 1538

原创 使用Android Compose实现网格列表滑到底部的提示信息展示

目前大多数的APP都会使用列表的方式来呈现内容,例如淘宝,京东,腾讯体育的评论区等都会使用列表布局。在Android传统的View中主要是使用RecyclerView控件来实现大量数据的展示。而在Compose中使用的是LazyColumn或者是LazyGrid组件。这些组件的使用都很简单,网上有很多的例子,不是本文的重点,本文的重点是介绍实现当我们需要展示的数据展示完了后,即列表滑动到最底部的时候,我们需要展示给用户一个提示信息:比如:”已经到底“。

2024-01-09 14:09:45 1183

原创 Git命令之本地分支与远程分支支关联/解除关联

在实际的工作生活中,往往需要将本地的分支和远程分支关联,这样我们就可以使用git pull命令来更新拉取最新的代码,但是有时候会出现运行命令后报错:Your configuration specifies to merge with the ref 'refs/heads/xxx'from the remote, but no such ref was fetched.

2023-12-14 17:20:29 1407

原创 Jetpack Startup 优雅完成库的初始化和方法接口简化

Startup允许库的开发者和App的开发者共享一个ContentProvider,用于完成各自的初始化逻辑,并且支持设置组件之间的初始化顺序。因此可以做到无需用户调用初始化方法就能获取到安卓上下文

2023-12-13 20:19:53 889

原创 C/C++跨平台构建工具CMake-----灵活添加库并实现开发和生产环境的分离

在本文中,我们将会学习如何使用Cmake工具创建一个项目,然后介绍如何在项目中添加和使用库以及如何将我们的库设置成可以动态切换的。这里可动态切换的意思是,使用命令切换,便于调试项目

2023-10-29 12:01:22 727 1

原创 C/C++宏定义和宏函数

作为Android的开发者,熟悉jni和C++是必须的,最近看到jni的代码中有很多的宏相关的知识点,去学习了解了下整理了本文,本文会介绍宏的定义,包括宏替换和宏函数,以及一些特殊的宏和命令符号

2023-10-27 13:25:16 471

原创 Android Jetpack Compose之生命周期与副作用

借助于Kotlin的DSL语言特性,Compose可以很形象地描述UI的视图结构,视图结构对应的是一棵视图树的数据结构,这棵树在Compose中称为Composition,Composition会在Composable初次执行时被创建,当在Composable中访问State时,Compose记录其引用,当State变化时,Composition触发对应的Composable进行重组,更新视图树中的节点,然后达到刷新UI的目的。

2023-10-11 13:22:41 518

原创 C++指针的使用

C/C++的指针使用非常的广泛,也是一大难点,本文将介绍指针的使用,因为害怕每次看了又忘记,所以记录下。因为现在AR的兴起,C++也越来越火,因为OpenGL渲染基本都是用的C++,所以值得好好学习。

2023-10-01 20:51:45 399

原创 Android 使用Kotlin封装RecyclerView

在一个开源项目上看到了一个Android Kotlin版的RecyclerView封装,个人觉得非常方便,所以就将这个封装摘了出来,记录下,方便以后使用,这个开源的项目叫[DanDanPlayForAndroid](https://github.com/xyoye/DanDanPlayForAndroid)点击链接可以查看具体的开源项目代码。

2023-09-30 22:58:48 1588

原创 C/C++跨平台构建工具CMake-----在C++源码中读取CMakeLists.txt配置文件中的内容

本文介绍如何在C++代码中访问CMakeLists.txt文件中配置的值,比如我们的程序中想要区分debug环境和release环境的时候就可以在CMakeList中添加配置,就像Android 的gradle 插件生成的BuildCongfig类一样,我们可以方便的用这个类的DEBUG和RELEASE来区分开发环境和正式环境

2023-09-30 18:30:15 1405

原创 C/C++跨平台构建工具CMake入门

本文主要是介绍在windows上搭建CMake的构建环境并基于MinGW编译工具编译跑通一个C++程序,并且提供给读者学习CMake的方法。并鼓励读者那能够使用博客的方式将自己的理解记录下来,否则过一段时间就忘了,本文的最重要的目的也是防止自己忘掉。故记录一下。

2023-09-29 23:05:57 588

原创 Android Jetpack Compose之确定重组范围并优化重组

Composable函数在进行重组时会尽可能的跳过不必要的重组,只对需要变化的UI进行重组。那Compose是如何认定UI需要变化呢?或者换句话说Compose是如何确定重组的范围呢。如果重组随意的发生,那么对UI的性能会是一个很不稳定的状态,时而好,时而坏。而且如果编写的UI代码有问题,那么重组将会带来状态的混乱,导致UI显示出错。所以弄清楚Compose重组的范围确定才能更好的避免重组的坑,并且可以针对具体的范围做优化,所以本文将介绍如何确定Compose重组及性能的优化

2023-09-26 13:23:55 388

原创 Android Jetpack Compose之UI的重组和自动刷新

在传统的View中,若要改变UI,需要我们修改View的私有属性,比如要修改一个TextView的文字,我们需要通过它的setText(“xxx”)方法去修改。而Compose 则是通过重组来刷新UI。在之前的状态管理的文章中也提到过重组的概念。本章主要就是介绍Compose的重组和刷新相关的内容。

2023-09-20 13:14:17 357

原创 Kotlin使用infix关键字构建高可读性代码

相比于Java语言,kotlin集各家所长,可以使用更少的代码,实现更复杂的需求,还能保持高可读性,infix 函数就是Kotlin提供了一种高级语法糖特性。可以增加代码的可读性

2023-09-17 10:58:15 123

原创 Android Jetpack Compose 使用 ViewModel

所以,在复杂的业务逻辑下,我们可以将Stateful的状态提到ViewModel中管理,这样Stateful Composable也就变成了一个Stateless Composable,通过参数传入不同的ViewModel即可替换具体的业务逻辑,大大增加了可复用性和可测试性

2023-09-13 13:22:32 899

原创 Android Jetpack Compose之状态持久化与恢复

我们都知道remember可以缓存创建状态,避免因为重组而丢失。使用remember缓存的状态虽然可以跨越重组,但是不能跨Activity或者跨进程。比如横竖屏切换等ConfigiurationChanged事件发生时,假设没有重写对应的onConfigurationChanged函数,Activity就会被销毁重建,导致remember保存的状态丢失。为了解决这个问题,Compose提供了rememberSavable解决这个问题

2023-09-11 13:41:54 440

原创 Android Jetpack Compose 用计数器demo理解Compose UI 更新的关键-------状态管理(State)

假如我们把Composable的执行看成是一个函数的运算的话,那么状态就是函数的参数,输出就是生成的布局。由于唯一的参数决定唯一的输出,所以只有当函数的参数发生了变化,生成的布局才会相应的跟着变化。

2023-09-06 15:00:09 1283 1

原创 Android使用Gradle kotlin dsl 优雅配置构建项目

Gradle的出现可以说是为Android的项目构建插上了翅膀,让Android的apk打包构建更简单高效。但是Gradle是使用Groovy语言开发的,虽然说是和JAVA语言差不多,语法啥的差异也不大,但是终究他们两个还是不同的语言,开发者要想做Android打包的配置,还需要去了解Groovy语言,这无疑增加了开发者的负担。而使用Kotlin gradle dsl可以有效的解决这一痛点,只使用kotlin一种语言就可以完成Android的编写、构建、,本文将介绍基于Kotlin DSLgradle的使用

2023-08-14 08:52:03 3424 14

原创 解决Git拉取代码仓库时显示文件名太长无法创建的问题解决

拉取鸿蒙仓库应用示例代码时,发现能下载成功,但是会报一个错误,文件太长,无法创建,这时候运行git status 会发现很多修改的文件,看着不舒服,本文就是为了解决这个问题

2023-07-22 23:23:59 690

原创 解決JetpackCompose 编译通过但是运行报错的问题

解决Compose UI 运行报错的问题,编译啥的都能通过,也能安装成功,但是就是运行无法成功,启动就闪退。

2023-07-22 17:35:14 181

原创 Android JetPack Compose之主题的理解与使用

根据百度百科知识,主题可以被定义为:文艺作品中所表现的中心思想。我们的APP就是一个作品,所以它的主题也代表了这个APP想要表达的思想,就比如看到京东APP的红色,我们就能明确的知道这是京东系的购物APP,看到淘宝的橙色我们就可以想到是阿里系旗下的产品……,现在的Android手机还有深色主题和亮色主题。分别代表不同的场景。所以主题可以理解为app的整体对外的一个形象,不同风格的主题会展现给人不同的形象。包括颜色,字体,形状等,当然也包括其他类型的多媒体资源,例如文本,声音,和图像等。

2023-07-18 13:56:49 479

原创 解决Git fatal: refusing to merge unrelated histories报错

解决fatal: refusing to merge unrelated histories 报错

2023-07-18 10:57:41 525

原创 框架开发使用注解处理器APT优雅提效

注解处理器(Annotation Process Tool)顾名思义就是一种处理注解的工具,它可以极大的优化我们平时写的冗余代码,比较典型的就是Android开发者经常写的findViewById,这

2023-07-16 12:25:21 124

原创 Android Studio无法打开问题解决记录

Android Studio因为禁用Kotlin插件导致启动一直报错,无法使用,本文主要是解决这个问题的方法步骤

2023-07-11 21:15:52 867

原创 OpenHarmony之小熊派Bearpi-hm_micro_small刷机问题避坑

最近大家都知道,华为出了一个中国的手机操作系统HarmonyOS,本人很是激动,因为中国终于有了自己的手机操作系统,而且我去了解了下,发现完全不同于Android和IOS操作系统,有很多人老是在说鸿蒙是套壳Android,我真的当时觉得这些人真的是崇洋媚外,就觉得东西都是国外的做的好。对于这些人我就想说,丢人。

2023-07-10 08:24:03 217

原创 Android Compose UI实战练手----Google Bloom 主页实现(完结)

主页的页面比前面的欢迎页和登录页面要复杂得多,假设使用传统的view,即使用xml布局的方式,我们可能需要书写很多的代码,但是使用Compose UI,这一切都会变得很简单,有了前面的页面开发经验,我们拿到这个主页的页面时首先想到的第一步就是拆分页面。然后将拆分后的页面使用Compose UI中对应的组件来实现。

2023-07-08 14:05:08 353 3

原创 设计模式之结构型模式---代理模式

代理模式是结构型模式的一种,结构型模式描述的是如何将类和对象按照某种布局组成更大的结构,它分为类结构型和对象结构型,类结构型主要都会哦那个继承机制来组织接口和类,而对象结构型主要是使用组合和聚合来组合对象。代理模式分为两种,分别是静态代理和动态代理,代理模式主要是为其他对象提供一种代理以控制对这个对象的访问

2023-07-08 11:31:32 481

原创 Java并发应用编程之任务执行分析

DougLea等人写的《Java并发编程实战》中是这样描述任务的:“在多数的并发应用程序中,都是围绕着“任务执行”来构造的,而任务通常是一些抽象且离散的工作单元,通过把应用程序的工作分解到多个任务中,可以简化应用程序的组织结构,提供一种自然的事务边界来优化错误恢复过程,以及提供一种自然的并行工作结构来提升并发性。”这段话理解起来就是:我们将一个很复杂的工作A,分解成很多的小任务,然后让这些小任务同时开始干自己的事情。当这些小任务都干完了后再合并成我们要完成的最终的那个复杂工作A。而如何合理的将这个复杂的任务

2023-07-03 10:13:47 172

原创 Android Compose UI实战练手----Google Bloom登录页实现

在之前的章节中我们已经介绍了如何实现Google Bloom练手项目的欢迎页,本文介绍如何使用Compose UI实现登录页,登录页使用传统的View去开发的时候需要先去使用XML定义好布局界面,然后在Activity中去加载布局界面,最后拿到对应的输入框ID,按钮ID等去实现登录功能,但是使用Compose UI来实现这些就显得很简单,我们只需要使用Compose UI 的相关组件根据Compose提供的布局组件,组合到一起就可以了,最主要的是拆分页面,让其分成不同的小组件,然后分别用Compose U

2023-06-29 13:20:19 819

原创 使用Java设计实现一个高效可伸缩的计算结果缓存

现在的软件开发中几乎所有的应用都会用到某种形式的缓存,重用之前的计算结果能够降低延迟,提高系统吞吐量,但是需要消耗更多的内存,是一种以空间换时间的方法。和许多`重复造的轮子`一样,缓存看起来很简单,无非就是把所有的计算结果保存下来,下次使用的时候优先使用缓存中已经保存的结果,没有的情况下才去重新计算。但是不合理的缓存机制设计却会让程序的性能受到影响,本文就通过对一个计算结果缓存的设计迭代介绍,分析每个版本的并发缺陷,并分析如何修复这些缺陷,最终完成一个高效可伸缩的计算结果缓存。

2023-06-20 10:22:28 201

原创 程序员必备知识之面向对象七大设计原则

如果我们能站在巨人的肩膀上眺望远方,为啥还要自己去艰难的翻越一座又一座的高山呢。面向对象设计原则就是前辈们在实战中给我们总结下来的宝贵经验和财富。我们可以基于这些经验,编写出很优秀的面向对象程序。在我将近5年的编程工作中,我发现,面向对象设计原则每个人好像都知道一点,每一个人好像都会点,但是写出来的代码依然是我行我素。野路子频出。很多编程不按照原则来,一股脑的瞎干,写出的程序给到后面人维护的时候,迎来的是一堆埋怨和骂声,以及无休止的一次又一次的重构,重构后发现还是和上一次代码一样的货色。

2023-06-18 17:20:43 221

原创 Vue练手项目之仿京东到家主页

本人是一个从事Android开发5年的程序员,对各大优秀的编程语言都很感兴趣,Vue.js为啥会引起我的注意并且想学好它呢?一是因为Vue.js的理念和Android的Compose UI相似,可以对比学习,取长补短;其次,我想学习web应用的开发来做一些Web应用辅助Android的开发。实际上在Android开发中,多人开发的时候,不管是版本发布,还是自动打包,还是组件化,都离不开Maven仓库,打包服务器,还有邮件的折磨,在大公司里面,这一套都会有各种平台,比如京东的主站打包有一个专门的界面友好的We

2023-06-17 17:03:17 1197 3

opengl-glm.zip

GLM是OpenGL Mathematics数学库,,它是一个只有头文件的C++库,兼容Windows,MacOS和Linux,它可提供与图形概念相关的类和基本数学函数,例如矢量,矩阵和四元数,它还包含各种工具类,用于创建和使用常见的3D图形结构,例如透视矩阵和视角矩阵

2023-05-02

glew-2.2.0.zip

GLEW(OpenGL extension wrangler),即OpenGL扩展牛仔,OpenGL是围绕一组基本功能和扩展机制进行组织的,随着技术的发展,扩展机制可以用来支持新的功能,所以GLEW 就是用来干这个活的,这个库适应的人群是OpenGL的研究者,对OpenGL感兴趣的入门者都可以。主要也是和OpenGL一起搭配使用

2023-05-02

SOIL2-1.3.0.zip

OpenGL 纹理图像加载库,使用人群:OpenGl 开发者

2023-05-02

premake-5.0.0-beta2.zip

安装SOIL2的工具,使用于想要集成SOIL2库的开发人员

2023-05-02

glfw-3.3.8.bin.WIN64.zip

用于在Windows,MacOs,Linux以及其他操作系统上负责将帧缓冲区中的内容绘制到屏幕中的窗口中的API,适用于在Windows电脑上做OpenGL开发的人群,包括学生,程序员以及对OpenGL 感兴趣的小伙伴

2023-05-02

sqliteSpy工具windows版本

查看Android上的sqlite生成的数据库文件

2022-10-15

Kotlin Base64编解码类

Kotlin Base64编解码类,可以对AES/DES的加密密文作编码和解码,防止出现加解密出错的问题。 encrypt before size: 16 encrypt after size: 24 使用DES作加密解密时,咱们会发现加密后的密码变长了,这样会直接导致加解密失败,而且会有乱码的情况。这时就需要Base64编码和解码,然后就可以使用了。 Base64 Des 加密= v�W�� �ZDž��.���Ou��� Exception in thread "main" javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher at java.base/com.sun.crypto.provider.CipherCore.prepareInputBuffer(CipherCore.java:1007) at java.base/com.sun.crypto.provider.CipherCor

2022-10-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除