自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 Android 生物识别:构建一个存储用户敏感信息的安全应用

Biometric 是一组 API 和框架,旨在为 Android 应用程序提供生物识别功能,以提高用户安全性和便利性。这些生物识别技术通常包括指纹识别、面部识别和虹膜扫描等。:强类型识别验证它要求用户提供强大的生物识别信息,例如指纹和虹膜扫描,这使得难以伪造和绕过验证。它提供了高级别安全性,适合处理敏感数据和交易类型的应用。:弱类型识别验证使用人脸识别等不太安全的验证方法,与强类型相比可能更容易欺骗或绕过验证,此方式适合安全性较低的应用。

2023-12-18 21:03:12 1160

原创 Android SplashScreen API:打造引人注目的启动画面

在移动应用开发中,启动画面是用户第一次接触到应用的重要组成部分,也是第一印象。然而,许多 Android 应用在启动阶段都面临着一个普遍的问题:白屏。为了改善这一问题,我们通常的做法都是自定义一个单独的启动页面,但这并没有解决根本问题。于是谷歌在 Android 12 系统上引入 SplashScreen API,它可以让开发者轻松的添加应用画面,开发者只需要添加我们的应用图标以及定义动画的进出场,便可解决白屏问题。

2023-12-15 09:51:41 1392

原创 Android系统中的传感器技术,你了解多少?

Android 传感器系统是一套设计精良的硬件和软件集合,用于测量运动、屏幕方向和各种环境条件。这些传感器能够提供高精确度和高准确度的原始数据,旨在为移动设备提供丰富的环境感知能力。

2023-12-12 23:01:40 955

原创 使用Jetpack Compose构建一个多行文本提示的TextField

decorationBox 接受一个 lambda 表达式,该表达式定义了装饰框架的内容。在这个 lambda 表达式中,你可以使用 Compose 提供的其他函数来构建输入框的样式和装饰。比如,你可以使用 background() 函数来设置背景色、border() 函数来添加边框等。

2023-12-07 11:54:27 459

原创 深入理解 Android 架构 Clean Architecture(补充篇)

Clean Architecture 提供了一种强大的软件设计理念,其核心思想是通过分层和分离关注点的方式构建可维护、可测试和可扩展的软件系统。将系统分为实体、用例、接口适配器和框架与驱动器四个层次,每个层次有着清晰的责任和依赖规则。这样的结构确保了业务逻辑的纯粹性,使得系统内核独立于外部细节。同时,Clean Architecture 强调了 SOLID 原则的应用,进一步提升了代码的灵活性和可维护性。

2023-12-07 11:34:27 1199

原创 深入理解 Android 架构 Clean Architecture(解析篇)

一般数据源返回的模型可能不是其他层所完全需要的模型,通俗点来讲服务器返回了一篇文章的所有信息例如:编号、内容、标题、时间、类型、作者等等,但是我们只需要编号标题和内容,其它数据不需要,所有需要领域层定义对应的领域模型。首先 UI 会引用 ViewModel 公开的状态,随即界面向 ViewModel 发送用户的事件,然后 ViewModel 进行一系列的处理后更新状态,状态一旦更改就会驱动UI进行刷新,最后呈现给用户,这就形成了单向的数据流也是MVI设计模式的核心。

2023-12-06 14:01:22 1155

原创 深入理解 Android 架构 Clean Architecture(介绍篇)

在 Android 开发领域,选择适合的架构常常成为新手开发者们的一大挑战。从以往的MVC、MVP、MVVM再到MVI,每种设计模式都在其特定的背景下提供了一种组织和管理代码的方式,这让新手开发者感到困惑,不知道该如何抉择。本文将采用分篇的形式深入探讨 Android 架构模式,分析它们的特点和应用场景,帮助新手开发者选择适合自己项目需求的架构。

2023-12-06 11:52:57 1143

原创 深入探讨 Jetpack Compose 中的一次性事件

三种处理一次性事件的方法,各有各的优缺点,在日常开发中我用的最多的时Channel和SharedFlow,虽然State可以解决流丢失的问题但是会有重复的代码,需要重置状态对于我来说不太友好,其次是SharedFlow虽然也可以实现缓存的功能但是需要手动设置,我会选择Channel处理该问题。

2023-11-09 11:28:49 231

原创 【Android】三个技巧让你的代码简洁、可读

使用解构的方法,用 (onlineUsers、offlineUsers) 接收两个列表,这样调用者一看就知道代码的含义了。分区函数对聊天室里的所有成员进行了分类,分区的条件是用户是否在线,返回一个。属性来获取在线和离线的用户列表,但是可读性不高,因为无法区分两者的类型。方法,只需要一个简单的属性接收即可使用,不需要重新分配一个变量。,这样调用者就能很清楚的知道该方法返回的是什么,提高了可读性。的一堆方法才能得到我们想要的,就会显得很麻烦和重复代码。类型,如果调用者这时调用了这个方法而他却不知道返回的。

2023-11-05 22:35:47 144

原创 【Android基础】之 Intent & IntentFilters

`Intent` 是一个消息传递对象,可以用来从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,常用的三种场景

2023-10-26 14:18:58 208

原创 Android之Koin依赖注入使用指南

在介绍Koin之前,回顾以下依赖注入(DI)在开发中的作用降低耦合度提高复用性无代理无代码生成无反射与方法作用factory{ }普通注入,以工厂的方式定义(每次都会构造一个新对象)single{ }单例注入(全局只有一个对象)viewModel注入,这是Koin专门给ViewModel提供的scope{ }定义作用域scoped{ }在scope{}里使用get()自动获取依赖对象named()定义命名,用于限定符在Module。

2023-10-25 14:04:00 520

原创 Jetpack Compose之使用Coil进行图像缓存指南

其实coil是通过对url进行图片加载的,并且在幕后也进行了缓存工作。在中可以直接调用,这是Coil默认的图片加载器。下面我们将自定义自己的图片加载器以满足我们开发中的各种需求。创建继承并实现的接口,在方法中重写我们自己的图片加载器覆盖掉默认的。从代码看出提供的类型还是很多的,可以根据需求自定义。//在这里可以自定义我们的ImageLoader.memoryCachePolicy(CachePolicy.ENABLED)//开启内存缓存策略.memoryCache {//构建内存缓存。

2023-10-24 14:42:23 788

原创 Android Jetpack 组件之DataStore的使用

只需对数据结构化的方式进行一次定义,编译器便会生成源代码,轻松写入和读取结构化数据。我们是配置依赖项的中声明了proto源码地址路径在,在src/main/下新建一个probo包,在其包下新建我们的probo文件:data.proto 的内容如下:如果需要高亮显示 proto 代码,下载 proto 插件/**完成 Gradle 设置后,让我们开始创建包含必填字段的原型文件。在目录app/src/main/下创建一个 proto目录。新建一个名称为 data 扩展名为.proto的文件。

2023-10-23 11:02:52 435

原创 Android之Dagger&Hilt依赖注入使用指南

Dagger2是一个依赖注入框架。它提供给Java和Android使用,主要用于模块间解耦、提高代码的健壮性和可维护性。使用了 IOC (控制反转)的思想,在编译阶段使用 APT 利用 Java 注解生成 Java 代码,然后结合部分手写代码来完整依赖注入工作。运行前需要先编译一次项目,目的是用 APT 生成中间代码。Dagger2不使用反射,在编译阶段生成代码,所以不会程序性能有影响。Dagger2 官网。

2023-10-22 00:09:06 1347

原创 Android 实现应用多语言化(跟随系统)

随着应用的持续发展,可能面临着出海的需求,因此应用必须支持多种国家的语言以满足人们的需求。跟随系统语言语言内切换语言。

2023-10-09 10:38:07 507

原创 Jetpack Compose之实现画中画(PIP)

从 Android 8.0(API 级别 26)开始,Android 允许以画中画 (PiP) 模式启动 activity。画中画是一种特殊类型的多窗口模式,最常用于视频播放。使用该模式,用户可以通过固定到屏幕一角的小窗口观看视频,同时在应用之间进行导航或浏览主屏幕上的内容。

2023-10-08 17:40:29 93

原创 Jetpack Compose之自定义Modifier

使用开发的都知道Modifier是有多重要,它是用来修改我们的可组合项(行为、外观)。我们希望在不同的可组合项中共享相同的功能或者行为,而不是重复的添加相同的修饰符,所以才需要自定义修饰符。示例一的自定义Modifier主要用于静态的外观修改示例二适用于涉及到任何状态或组合上下文的自定义场景。

2023-10-08 12:08:42 94

原创 Jetpack Compose之持久保存和恢复LazyColumn的滚动位置

默认情况下,LazyColumn在屏幕进行旋转之后仍然会保持之前滑动的状态,但是一旦应用重新启动,之前滑动的状态则会消失并且从第0条数据显示,下面将介绍如何持久保存和恢复LazyColumn的滚动位置。

2023-10-07 13:48:41 328

原创 Jetpack Compose之动画使用指南

许多动画API可以提供可组合函数,就像布局和其他界面元素一样;它们由使用Kotlin协程挂起函数构建的较低级别 API 提供支持。如何选择合适的动画API:如果您要为布局中的内容变化添加动画效果:如果您要为出现和消失添加动画效果:使用。根据状态交换内容:如果您要为内容添加淡入淡出效果使用Crossfade,否侧使用。如果动画效果基于状态如果在组合期间呈现动画效果:如果动画效果无限循环使用。如果您要同时为多个值添加动画效果:使用。否则使用。使用Animation。使用。

2023-09-29 16:41:41 224

原创 Jetpack Compose之在ViewModel中应该使用哪种State

状态(State)是指一个可变的数据存储对象,它可以用来跟踪应用程序中的信息和用户界面的变化。Compose是一个用于构建用户界面的现代Android UI工具包,它引入了一种响应式的方式来构建界面,只要状态发生了改变就会进行UI重组。在日常开发中我们可能会使用一些带有协程流的中间运算符来简化逻辑,所以你会发现StateFlow真的比强大很多。

2023-09-02 23:52:36 212

原创 Jetpack Compose之Firebase云消息接入指南

Firebase Cloud Messaging(FCM)是由Google提供的一项云端消息传递服务,旨在帮助开发者向移动设备、网站和服务器应用程序发送推送通知和实时消息。它为开发者提供了一种简单而强大的方式来与用户进行交互,无论用户是在应用内还是在应用外。Firebase控制台官网FCM 推送收不到问题?检查App是否开启了通知权限(13系统动态申请权限)查看真机或者虚拟机是否有GMS服务(国产手机需要安装)设置定位条件后收不到信息,检查是否接入Analytics分析功能相关文档。

2023-09-01 16:00:17 314

原创 Jetpack Compose之动态申请权限(更新中)

目前 `Jetpack Compose` 要想实现应用运行时动态的向用户申请权限,有两种方法:

2023-08-10 09:48:32 677

空空如也

空空如也

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

TA关注的人

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