自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(109)
  • 资源 (8)
  • 收藏
  • 关注

原创 Android Jetpack 概述

本文系统梳理了Android Jetpack核心组件及其学习路径。架构组件(Lifecycle/ViewModel/LiveData)是基础,用于管理UI生命周期和数据驱动;Room和DataStore处理数据持久化;UI组件(Navigation/Paging/Compose)优化界面交互;WorkManager等处理后台任务。建议从官方文档入手,按"架构基石→数据持久化→界面交互→后台任务"的顺序学习,先掌握MVVM模式下的基础组件(Lifecycle-ViewModel-LiveD

2026-01-06 19:45:29 620

原创 Android 架构模式的演变(MVC、MVP、MVVM、MVI)

本文系统梳理了Android架构模式的演进历程,从MVC、MVP到MVVM,再到新兴的MVI模式。重点分析了每种架构的特点:MVC简单但耦合度高,MVP通过接口解耦但接口膨胀,MVVM利用数据绑定实现响应式编程,MVI则强调单向数据流和状态管理。文章指出架构演进的核心在于解决"上帝类"问题,实现职责分离、提高可测试性,并通过状态管理优化开发体验。现代架构模式如MVVM和MVI结合LiveData等组件,能更好地处理生命周期和异步操作,适应日益复杂的应用需求。

2026-01-06 19:41:55 871

原创 Android 四大组件——ContentProvider(内容提供者)

摘要:ContentProvider是Android四大组件之一,用于实现应用间数据共享。文章详细介绍了ContentProvider的架构与工作原理,包括核心组件ContentResolver、Uri、Cursor等。重点讲解了创建ContentProvider的步骤:定义子类、实现数据库帮助类、实现CRUD方法以及在清单文件中注册。同时介绍了如何使用ContentResolver访问其他应用的数据,如读取短信和联系人等系统数据,以及通过ContentObserver监听数据变化。文章提供了完整的代码示例

2025-12-25 15:03:16 661

原创 Android 四大组件——Service(服务)【基础篇2】

本文详细分析了Android开发中前台服务(ForegroundService)和后台服务(BackgroundService)的区别与应用。前台服务具有高优先级,必须显示常驻通知,系统限制较少且不易被终止;后台服务则用户无感知,受Android 8.0+严格限制,应用进入后台后很快会被停止。文章通过Java代码示例展示了两种服务的实现方式,包括前台服务的完整实现流程(创建通知渠道、构建通知、启动服务等),并特别说明Android 10+新增的前台服务类型声明要求。针对后台服务的限制,文章建议使用WorkM

2025-12-22 18:36:14 975

原创 Android 四大组件——Service(服务)【基础篇1】

Android服务是四大组件之一,用于后台执行长时间运行操作,无用户界面。服务分为两种启动方式:StartService启动的服务独立运行,通过stopService停止;BindService启动的服务支持双向通信,所有客户端解绑后销毁。服务生命周期包含onCreate、onStartCommand、onBind等重要回调方法,其中onStartCommand的返回值和flags参数决定了服务被杀死后的恢复行为。关键区别在于服务是Android组件,比普通线程优先级更高,适合音乐播放、文件下载等后台任务。

2025-12-18 21:03:42 796

原创 Android 四大组件——BroadcastReceiver(广播)

本文全面解析Android四大组件之一的BroadcastReceiver。主要内容包括:1)广播接收器定义及核心设计思想,作为响应系统或应用内事件的"事件监听器";2)工作原理,包括系统匹配和执行流程;3)两种广播类型(标准广播和有序广播)及使用示例;4)两种注册方式(静态和动态);5)本地广播的优势及使用方法;6)安全考量如权限设置和exported属性;7)最佳实践,包括避免耗时操作和生命周期管理;8)常用系统广播列表。文中通过有序广播的完整示例,演示了从权限检查到最终处理的链式流

2025-11-06 17:31:28 849

原创 Android 四大组件——Activity

本文系统介绍了Android开发中Activity的核心知识。主要内容包括:Activity基础概念与生命周期(onCreate、onStart等7个回调方法);不同Activity类的区别(Activity、ActionBarActivity、AppCompatActivity);onCreate方法单双参数的区别;Activity间数据传递的注意事项;关闭所有Activity和退出应用的方法;屏幕旋转对Activity的影响及解决方案(保存状态、固定方向、ViewModel等);四种启动模式(stand

2025-10-28 16:07:12 1407

原创 Android 四大组件桥梁 —— Intent (意图) 详解

Intent(意图)是 Android 程序中在不同组件之间(如 Activity、Service、BroadcastReceiver)传递消息的对象。它可以在运行时绑定不同的组件,是组件间通信的核心。主要作用启动组件:启动一个 Activity、Service 或发送一个 Broadcast。传递数据:在组件之间携带数据。声明目标组件:可以明确指定要启动的组件,也可以只描述要执行的动作,由系统来选择合适的组件。(Intent)/(Intent):来启动一个Activity(Intent)/

2025-10-19 21:41:06 1009

原创 Android adb 基础使用指南

本文详细介绍了ADB(Android调试桥)的常用命令及其功能,涵盖设备管理、文件操作、系统调试、应用管理等多个方面。主要内容包括:1. 设备基础操作命令(连接、重启、挂载等);2. 文件目录操作与传输命令;3. 系统信息查询与进程管理;4. 网络配置与日志查看;5. 应用安装/卸载的多种方法;6. 硬件模拟与广播发送技巧。这些命令适用于Android开发调试、系统维护和自动化测试等场景,其中特别强调了需要root权限的操作和实用技巧(如快速部署、分体APK安装等)。掌握这些命令可以显著提升Android设

2025-10-14 19:11:36 1064

原创 Android studio 高效使用

Android Studio高效使用指南:从配置到快捷键 本文详细介绍了Android Studio的高效使用方法,涵盖环境配置和快捷键操作两大核心方面。在环境配置部分,重点讲解了主题选择、字体设置、代码格式规范(包括缩进、空格、换行等)、日志颜色配置和代码模板等优化技巧,帮助开发者打造舒适的编码环境。快捷键部分则系统整理了编辑、导航、重构、调试等场景下的高效操作方式,如智能补全(Ctrl+Space)、快速修复(Alt+Enter)、代码格式化(Ctrl+Alt+L)等核心快捷键。这些技巧能显著提升And

2025-10-14 11:43:19 924

原创 Android 项目:画图白板APP开发(九)——撤销、恢复(覆盖前文所有功能)

本文详细介绍了白板APP中撤销(Undo)和恢复(Redo)功能的实现方案。系统通过定义6种操作类型(NORMAL_ONE_STROKE、SLIDING_MULTI_STROKE_HAVE/UN_HAVE、ERASER_STROKE、ZOOM_OPERATION、CLEAT_SCREEN_OPERATION),使用mCancelList和mRecoverList两个数组分别存储待撤销和待恢复的操作记录。每个操作被封装为MessageStrokes对象,包含操作类型、受影响笔画信息及变换矩阵状态。重点阐述了撤

2025-09-17 20:06:19 1034

原创 Android 项目:画图白板APP开发(八)——Matrix位移放大缩小(附demo)

本文介绍了Android中使用Matrix类实现图形变换(位移、缩放)的方法。Matrix是处理2D图形变换的核心类,支持缩放、旋转、平移等操作。文章详细讲解了Matrix的主要方法:setScale()、setRotate()、setTranslate()等基本变换,以及postTranslate()、postScale()等追加变换方法。通过一个白板应用Demo,展示了如何结合触摸事件实现图形的拖拽和缩放功能,其中重点处理了多指操作的中心点计算和缩放比例限制(30%-300%)。代码实现了绘图和操作两种

2025-09-15 18:53:21 1040

原创 Android 项目:画图白板APP开发(七)——多指画图操作

本文介绍了如何为画板APP实现多指触控功能。首先讲解了Android触摸事件类型,包括单点和多点触控相关事件(ACTION_POINTER_DOWN/UP)。接着详细说明了处理多点触控的关键方法,如getActionMasked()、getPointerId()等,并强调要区分索引(动态变化)和ID(固定不变)。在实现部分,通过定义数组来记录20个触控点的坐标和画笔数据,重点讲解了ACTION_POINTER_DOWN时初始化新触控点数据,以及ACTION_POINTER_UP时保存完成笔画的方法。最终实现

2025-09-12 17:50:52 1103

原创 Android 项目:画图白板APP开发(六)——分页展示

本篇将介绍如何为我们的画板应用添加功能,让用户可以。这章没有啥知识点的讲解,主要介绍一下是什么样的。

2025-09-11 19:28:57 895

原创 Android 项目:画图白板APP开发(五)——橡皮擦(全面)

本文详细介绍了在Android画图白板应用中实现橡皮擦功能的多种方法。主要包括:1)使用PorterDuff.Mode.CLEAR模式的视觉橡皮擦;2)一键清屏功能实现;3)按笔迹擦除的交互式擦除方案;4)修改Path结构的切割式橡皮擦;5)电子笔笔帽擦除支持。文章重点讲解了各种擦除方式的实现原理、核心算法(如线段相交判断、切割点计算)和代码实现细节,特别是对Path结构的处理和对撤销功能的配合支持。通过多种擦除方式的组合,可以提供更灵活、高效的绘图体验。

2025-09-10 17:29:37 1349 2

原创 Android 项目:画图白板APP开发(四)——笔锋(单 Path)

它的主要作用是对一个已有的 Path对象进行测量路径的总长度。路径上任意位置(从起点开始的距离)的坐标点 (x, y)和切线角度 (tangent)。截取原始路径的某一段,生成一个新的 Path 片段。正因为能获取到路径上每个点的精确位置和方向,它成为了实现各类轨迹动画(如飞机沿航线飞行、箭头沿曲线移动)的核心组件。网上的很多案例,可以搜索看看,我在这里对其中的方法简单介绍下。

2025-09-09 15:30:43 810 1

原创 Android 项目:画图白板APP开发(三)——笔锋(多 Path 叠加)

本文介绍了在Android应用中实现"笔锋"效果的原理和方法。"笔锋"功能通过模拟真实书写体验,根据运笔速度、方向和压力使线条产生粗细、浓淡变化。文章详细讲解了:(1)利用VelocityTracker计算速度影响线宽;(2)通过压感数据调整线宽;(3)使用二次贝塞尔曲线绘制自然流畅的线条;(4)关键算法实现笔锋效果,通过在原路径两侧添加辅助路径形成锥形过渡。实现过程涉及数学计算、路径处理和性能优化,最终能呈现类似毛笔或钢笔的真实书写效果。

2025-09-04 21:29:46 1313 1

原创 Android 项目:画图白板APP开发(二)——历史点、数学方式推导点

数学方式新增点的方法。

2025-08-14 21:00:43 877 1

原创 Android 项目:画图白板APP开发(一)——曲线优化、颜色、粗细、透明度

在移动应用开发中,画图白板类APP是一个既能展示技术实力又能带来良好用户体验的项目。今天我将分享开发这样一个APP的第一部分,重点介绍以及和的实现。

2025-08-12 20:46:48 784

原创 Android 项目:画图白板APP开发(零)——功能介绍(笔锋,分页,缩放,多指,硬件加速等)

本系列将全面的介绍一些有关Android 画图方面的知识。笔触功能包括:颜色、粗细、透明度、笔锋、橡皮;绘图功能包括:分页、缩放、多指、撤销恢复、笔画加速。别看功能这么多,简单的部分会花较少篇幅介绍,着重会讲解复杂功能的实现。这一章只展示效果,后续文章会逐步实现本章介绍的功能。

2025-08-09 18:05:45 327

原创 自定义视图:图形与图像的处理(二):绘图

Android绘图开发摘要 本文介绍了Android动态绘图的基本方法,主要包括: 通过继承View并重写onDraw()方法实现绘图功能,使用Canvas、Paint和Path三个核心类进行图形绘制。

2025-08-07 19:02:54 620

原创 自定义视图:图形与图像的处理(一):使用简单图片

Android系统提供了ImageView显示普通的静态图片,也提供了AnimationDrawable来开发逐帧动画,还可通过Animation对普通图片使用补间动画。图形、图像处理不仅对Android系统的应用界面非常重要,而且Android系统上的益智类游戏、2D游戏都需要大量的图形、图像处理。 所谓游戏,本质就是提供更逼真的、能模拟某种环境的用户界面,并根据某种规则来响应用户操作。为了提供更逼真的用户界面,需要借助于图形、图像处理。 从广义的角度来看,Android应用中

2022-06-09 14:52:40 1151 2

原创 Android音视频开发(四)——MediaCodec:解码视频,得到YUV值,一帧一帧加载到SD卡中保存。

我们上一节了解了MediaExtractor、MediaMuxer、MediaFormat、MediaCodec.BufferInfo。重复的内容我就不再赘述了,假如有上面的四个的一些补充还是会写一下。接下来我们学习MediaCodec,本节篇幅会比较长,知识点较多,请耐心品味。一、MediaCodec​ MediaCodec类可用于访问低级媒体编解码器,即编码器/解码器组件。它是Android低级多媒体支持基础设施的一部分(通常与MediaExtractor, ...

2022-05-24 15:44:39 7731 7

原创 Android音视频开发(三)——MediaExtractor和MediaMuxer的使用

了解了音视频的编解码过程,我们接下来使用一下经常跟MediaCodec一起搭配的MediaExtractor和MediaMuxer。最后会使用一个简单的demo来了解具体了解这两个工具类的使用过程。这一节我们就先不讲MediaCodec了,放到下节的demo。一、MediaExtractorAndroid提供了一个MediaExtractor类,可以用来分离容器中的视频track和音频track。主要API介绍:setDataSource(String path):即可以设置本地文件又

2022-05-23 17:25:02 5783

原创 Android音视频开发(二)——Android编码实践

一、Android Camera API1.1 图像采集构建预览布局——使用SurfaceView或者TextureView 打开相机 ——Camera.open 设置参数——Camera.Parameters 设置预览数据回调——PreviewCallback 设置预览画布并启动——setPreviewTexture/startPreview 释放相机——stopPreview/release二、MediaCodec 实践2.1 MediaCodec (虽然常

2022-05-17 11:48:20 1606

原创 Android音视频开发(一)——音视频开发流程

一、视频文件是什么?视频文件就相当于是:音频码流和视频码流结合封装的一个容器。其中一个视频文件中可以放入多个音频码流和视频码流的文件。 并且从视频文件中导出来的视频压缩数据是不可以直接进行播放的(假设里面有两张相似的图片,其实并没有保存两张图片的完整信息,第二张图片可能只保存了与第一张图片的不同信息)二、为什么要编码?视频是连续的图像序列,由连续的帧构成,一帧即为一幅图像。由于人眼的视觉暂留效应,当帧序列以一定的速率播放时,我们看到的就...

2022-05-13 16:37:10 6578 3

原创 Android基于环信实现聊天功能(三)——登录注册界面

一、标题栏控件 EaseTitleBar 使用在 xml 中声明标题栏控件,可以在 xml 直接设置标题内容,左右图片,在 Java 文件中亦可以设置这些属性以及相关的点击事件。<com.hyphenate.easeui.widget.EaseTitleBar android:id="@+id/title_bar" android:layout_width="match_parent" android:layout_height="wrap_content"

2022-05-07 11:43:41 1361

原创 Android基于环信实现聊天功能(二)——欢迎界面(MVC)

这个系列只是一个基于环信的demo。界面设计很潦草,主要是完成功能的实现。首先结构分析:欢迎界面的功能是:延迟2s后跳转到指定界面(登录过就直接进入首页,没有登录就进入登录界面)一、准备工作:在集成环形的过程中需要创建一个IMApplication,用于初始化。1.IMApplication.javapublic class IMApplication extends Application { @Override public voi...

2022-05-05 10:08:26 850 1

原创 Android基于环信实现聊天功能(一)——了解环信

本系列知识点来自于:b站尚硅谷Android通信实战。一、环信集成概述环信和用户体系的集成主要发生在2个地方,服务器端集成和客户端集成。1.1发送消息过程客户端通过环信服务器进行消息发送。如下图所示: 在线状态:客户端A发送消息到环信服务器,环信服务器推送消息到客户端B。 离线状态:客户端A发送消息到环信服务器,环信服务器检测到客户端B不在线,会添加到离线缓存中,当客户端B登录后服务器会把离线消息推送给客户端B。 1.2聊天记录保存...

2022-05-01 23:34:18 3181

原创 Android打包知识体系(二)——APK签名介绍

上一节介绍到多渠道打包的快速,他是如何如此迅速的完成打包的?问题1:如何不修改签名的情况下,网APK中注入渠道信息???先不急接着往下看。一.APK签名介绍:1.APK 签名方案...

2022-04-18 13:33:41 6748 1

原创 Android打包知识体系(一)——ProductFlavor&&多渠道打包插件

一.什么是多渠道打包  在不同的应用市场可能有不同的统计需求,需要为每个应用市场发布一个安装包,这里就引出了Android的多渠道打包。在安装包中添加不同的标识,以此区分各个渠道,方便统计app在市场的各种下载量和其他数据。多渠道打包的原理就是为我们每个平台或者市场发布的apk指定一个唯一的标识符。通过这个标识符就可以知道被下载的apk是在哪个平台市场下载的。二.多渠道打包例子:1.新建项目,在app下build.gradle中android下添加如下代码:produc...

2022-04-11 01:31:04 2607

原创 【笔试算法题】数据结构的应用(bfs&双端队列)

一.bfsbfs(广度优先搜索),类似二叉树的层序遍历,利用队列完成。一般用于求最短路。图的最短路问题:给定一个无向图,每条边的长度都是1。求1号点到x号点的最短距离。 顶点数n 边数为mq次询问 输入x 输出1到x的最短距离。 若1号点到x不连通,则输出-1二.双端队列双端队列的应用(区间翻转):对于长度为n的数组,给定一个长度为m的区间,区间初始位置为a[1]到a[m]。3种操作:区间右移(最右端不会超过a[n]) 区间左移(最左端不会超过a[n]..

2022-04-06 15:40:20 1081

原创 【笔试算法题】动态规划(线性dp、前缀和、差分、二维dp、背包问题&树形dp)

一、线性dp问题:给定一个正整数组成的数组,取出一些数使得和尽可能大,要求不能取相邻的数。len 1e6例如:3,2,6,9,1 取3+9=12例如:2,4,6,8,9 取2+6+9=17dp[i][0]取了第i个数的情况下,前i个数取完的最大值dp[i][1]没取第i个数的情况下,前i个数取完的最大值二、前缀和、差分问题1:给定一个数组,多次询问[l,r]区间的总和是多少?要求做到O(1)询问 首先求出前缀和数组dp[i] (前i个数的和);使用后缀和...

2022-04-06 15:39:51 3482

原创 【笔试算法题】递归(dfs & 记忆化搜索 & 分治)

递归:递归指函数调用自身。常用的递归算法有dfs(深度优先搜索)、记忆化搜索和分治。一、dfs(深度优先搜索)1.图的dfs/** * 深度优先搜索 * * @param node * @param set */public void DFS(Node node, Set<Node> set) { if (node == null) { //当没有节点时,退出此次方法 return; } if (!set

2022-04-05 18:36:00 1633

原创 【面试算法题】十种常用排序算法详解

排序算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,如果排序以后,保证这些记录的相对次序保持不变,即在原序列中,a[i]=a[j],且 a[i] 在 a[j] 之前,排序后保证 a[i] 仍在 a[j] 之前,则称这种排序算法是稳定的;否则称为不稳定的。一.选择排序每次从待排序的元素中选择最小的元素,依次和第1、2、3...位置的元素进行交换。这样在数组前面的部分形成有序区域。每进行一次交换,有序区域长度加一。public static ...

2022-04-04 12:32:33 5899 5

原创 【笔试算法题】贪心和枚举(四个例子彻底弄懂)

笔试技巧:学会根据数据范围猜知识点 一般1s时间限制的题目,时间复杂度能跑到1e8左右(python和java会少一些,所以建议大家使用c/c++做笔试题)。 n范围20以内: O(n*2^n) 状压搜索/dfs暴搜 n范围200以内: O(n^3) 三维dp n范围3000以内: O(n^2) ...

2022-04-03 00:53:47 2858

原创 【算法题】kotori和n皇后

kotori最近在研究n皇后的问题。所谓n皇后问题是这样的:一个n*n的地图,上面一共放n个皇后,保证任意两个皇后都不能互相攻击(每个皇后可以攻击同一行、同一列以及同一45度角斜线和135度角斜线上的所有其他皇后)。kotori思考了很久都无法得出答案,整个人都变成琴梨了。她于是拿了一堆皇后在一个无穷大的棋盘上模拟,按照次序一共放了k个皇后。但是,皇后的站位太复杂了,kotori甚至不知道是否存在两个皇后会互相攻击。于是她想问问聪明的你,在第i个皇后放置在棋盘上之后,是否存在两个皇后可以互相攻击

2022-04-01 22:44:58 746 2

原创 ConcurrentHashMap jdk1.7详解 (如何实现并发访问的?)

前言:本来以为HashMap已经够复杂了,这不又冒出来一个大哥—— ConcurrentHashMap,但是类比HashMap还是很好理解的。本文章就带大家了解一下ConcurrentHashMap(结合不同版本)。读前须知:由于 ConcurrentHashMap 的源代码实现依赖于 Java 内存模型,为了更好的理解 ConcurrentHashMap,让我们首先来了解一下 Java 的内存模型。Java 语言的内存模型由一些规则组成,这些...

2022-03-27 22:40:52 1683

原创 ArrayList继承了AbstractList为何还要实现List接口?

与之类似的问题: Vector既然继承了AbstractList为啥还要实现List接口? HashMap继承了AbstractMap为何还要实现Map接口? HashSet继承了AbstractSet为何还要实现Set接口? 首先了解一下:AbstractListAbstractList:继承于AbstractCollection 并且实现了大部分List接口。ArrayList继承AbstractList是一种思想, 现在AbstractList里实现一些通用的

2022-03-27 14:28:58 1980 3

原创 Android面试必备——Java篇(2)

1.静态属性和静态方法能被继承吗?静态方法又是否能被重写呢?结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏.原因:1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用。如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是跟实例方法和属性不太一样,存在"隐藏"的这种情

2022-03-26 22:14:13 1155

5.3 调用摄像头和相册——案例文档.pdf

学习调用摄像头和打开相册的简单案例

2021-07-30

菜谱app源码:参考学习用

菜谱app源码。 目前万维宜源的数据api不可用,可以换成免费的:天气数据 想学习的,对照博客观看即可,这份源码只是辅助。

2022-05-31

AndroidMPChart资源jar包

AndroidMPChart资源jar包

2022-05-13

简易视频播放器pdf文档+源码.zip

7.2-简易视频播放器的设计与实现

2021-08-29

简易音乐播放器.zip

Android软件制作,学习需要

2021-08-29

Android SQLite数据库.zip

拥有Android SQLite数据库增删改查的基本代码讲解

2021-09-01

RecyclerView.zip

想了解RecyclerView的可以免费下载了解

2021-08-11

ListView.zip

适合Android入门人群

2021-08-09

空空如也

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

TA关注的人

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