自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android studio配置Flutter(看这一篇就够了)

Flutter 是 Google 推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart 语言开发 App,一套代码同时运行在 iOS 和 Android平台。Flutter 提供了丰富的组件、接口,开发者可以很快地为 Flutter 添加 Native(即原生开发,指基于平台原生语言来开发应用,flutter可以和平台原生语言混合开发) 扩展。

2024-04-22 18:00:24 573 2

原创 Android详细介绍POI进行Word操作(小白可进)

poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,你可以非常方便的加入到你的项目中,并且拥有着让人喜悦的特性。

2024-04-07 17:25:35 688 1

原创 Android学习使用GitLab(保姆级)

图文结合,详细介绍了Git Lab的使用,内容如下:一、注册你的GitLab账号 二、安装Git 三、在Android studio中配置Git 四、GitLab账户配置SSH Keys 五、GitLab账号创建项目 六、将Android项目上传到GitLab 七、从GitLab上clone项目 八、 分支管理 九、标签(Tag)管理

2024-03-17 18:52:08 812 1

原创 自定义View示例

第一步:在values目录下面创建自定义属性的XML在XML中声明了一个自定义属性集合“CircleView”,在这个集合里面可以有很大自定义属性,这里只定义了一个格式为“Color”的属性“circle_color”,这里的格式color指的是颜色。第二步:在View的构造方法中解析自定义属性的值并做出相应的处理。init();

2024-01-12 17:03:55 554

原创 自定义View之View的工作原理

View的绘制流程是从ViewRoot的performTraversals方法开始的,它经过measure、layout和draw三个过程才能最终将一个View绘制出来。 如图所示,performTraversals会依次调用performMeasure、performLayout和performDraw三个方法,这三个方法分别完成顶级View的measure、layout和draw这三大流程,其中在performMeasure中会调用measure方法,在measure方法中会调用onMeasure方

2024-01-08 16:51:44 959

原创 自定义View之重写onMeasure

重写 onMeasure0) 把尺寸计算出来把计算的结果用 resolveSize() 过滤一遍后保存@Override...onMeasure()方法的两个参数 widthMeasureSpec和heightMeasureSpec是父View对子View的尺寸限制,子View在计算自己尺寸的时候,需要遵守这两个参数所包含的限制MeasureSpec。理解MeasureSpec。

2024-01-07 13:05:32 958

原创 [Android]RadioButton控件

与普通按钮不同的是,RadioButton控件多了一个可以选中的功能,能额外指定一个android:checked属性,该属性可以指定初始状态是否被选中。其实也可以不用指定,默认初始状态都不被选中。RadioButton控件是单选按钮控件,它继承自Button控件,可以直接使用Button控件支持的各种属性和方法。RadioButton控件必须和单选框RedioGroup控件一起使用。

2024-01-03 21:40:38 811

原创 自定义View之理解测量onMeasure和布局onLayout过程

首先一个View的measure()方法会被它的父View调用,这个方法的作用是让这个View进行自我测量,不过真正进行自我测量的不是measure()方法,而是在measure()方法内部调用的onMeasure()方法,measure()是一个调度方法,它会做一些测量的预处理工作,然后去调用onMeasure()来进行真正的自我测量,这个自我测量包含什么内容呢?如果它是一个ViewGroup是有子View的,ViewGroup会先调用它的所有子View的measure()方法,让它们都进行自我测量。

2024-01-03 14:45:28 515

原创 自定义View绘制基础之Canvas

Canvas(画布)是一个用于绘制图形的重要类,它提供了一组绘图操作的方法,允许你在屏幕上绘制各种形状、图像和文本。功能:设置画布的裁剪区域为矩形。功能:设置画布的裁剪区域为路径。功能:在画布上绘制指定的路径。功能: 在画布上绘制一个椭圆。功能:在画布上绘制一个圆形。功能:在画布上绘制一个矩形。功能:在画布上绘制一条直线。功能:在画布上绘制一个弧形。:用于指定绘制效果的画笔。:用于指定绘制效果的画笔。功能: 在画布上绘制文本。:用于指定绘制效果的画笔。功能: 在画布上绘制位图。:用于指定绘制效果的画笔。

2023-12-29 16:51:24 1022

原创 APP启动流程

system_server 进程的 AMS 在 bindApplication 后,会调用 ActivityStackSupervisor.attachApplicationLocked, 之 后经过一系列操作,在 realStartActivityLocked 方法通过Binder IPC 向 App 进程发送scheduleLaunchActivity 请求;system_server 进程收到请求后,向 Zygote 进程发送创建进程的请求;

2023-12-28 21:20:27 493

原创 回溯算法练习题

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。偷窃到的最高金额 = 1 + 3 = 4。

2023-12-24 14:10:45 439 1

原创 动态规划算法练习题

其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8)。从下标为 0 跳到下标为 1 的位置,跳 1步,然后跳 3步到达数组的最后一个位置。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。整个序列均为摆动序列,各元素之间的差值为 (6, -3, 5, -7, 3)。不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。注意,你可以重复使用字典中的单词。重新上传取消转存失败重新上传取消。

2023-12-24 14:10:37 917

原创 贪心算法练习题

其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8)。编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。

2023-12-24 14:10:30 952

原创 数据交换技术

在通信过程中,分组是作为一个独立的实体,各分组之间没有任何联系,既可以断续地传送,也可以经历不同的传输路径。当A用户欲向 B用户发送数据时,A用户并不需要先接通至B用户的整条电路,而只需与直接连接的交换机接通,并需要发送的报文作为一个独立的实体,全部发送给该交换机。然后该交换机将存储着的报文根据报文中提供的目的地址,在交换网内确定其路由,并将该报文送到输出线路的队列中排队,一旦该输出线路空闲,就立即将该报文传送给下一个交换机。图中,由发信端HS发送的报文M 经由路径N1-N3-N6,传送到收信端HD。

2023-12-23 16:21:54 452 1

原创 信道复用技术

为提高时隙利用率,可以采用按需分配(或动态分配)时隙,一避免每帧中出现闲置时隙的现象,此时复用器传输的数据只来自正在工作的设备,这种动态分配时隙方式的工作TDM称为统计时分多路复用STDM。由此可见,STDM帧的长度是不固定的,事先并不知道哪个数据源产生的数据会占用哪个位置的时隙,为使接收端的复用器能正确分离各路数据,必须在每一时隙中带有地址信息。当 A 站发送数字1时,它就发送序列 (-1-1-l+1+1-1+1+1),而当 A 站发送数字为 0 时,就发送(+1+1+1-1-1+1-1-1)。

2023-12-23 16:17:52 1687 3

原创 力扣面试经典题之哈希表

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。中的每个非空单词之间存在着双向连接的对应规律。中的字符可以按某种映射关系替换得到。中每个字符出现的次数都相同,则称。,那么这两个字符串是同构的。整数,并返回它们的数组下标。,判断它们是否是同构的。

2023-12-22 14:37:48 456

原创 [Android]CheckBox复选框

在上面的代码中,我们获取了id为checkBox1的CheckBox控件,并设置了它的监听器。在Android开发中,复选框(CheckBox)是一种常用的控件,用于让用户在多个选项中进行选择。在上面的代码中,我们定义了一个id为checkBox1的CheckBox控件,并设置了它的宽度、高度和显示的文本内容。接下来,我们需要在Java代码中获取CheckBox控件,并设置它的监听器,以便在用户点击时进行相应的操作。除了设置监听器,我们还可以通过代码来获取CheckBox的状态,并进行相应的操作。

2023-12-22 14:21:57 926

原创 力扣面试经典题之二叉树

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。是指从根节点到最远叶子节点的最长路径上的节点数。,编写一个函数来检验这两棵树是否相同。,翻转这棵二叉树,并返回其根节点。,请构造二叉树并返回其根节点。给你两棵二叉树的根节点。给你一棵二叉树的根节点。给你一个二叉树的根节点。, 检查它是否轴对称。

2023-12-22 13:51:55 1137

原创 力扣面试经典题之数组/字符串(二)

随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

2023-12-20 11:50:34 914

原创 力扣面试经典题之数组/字符串

例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3。函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。的前五个元素被修改为 0, 1, 2, 3, 4。,返回其中的多数元素。

2023-12-20 11:39:56 1229

原创 【Android】百度地图 获取开发密钥,创建应用(保姆级教程)

keytool -list -v -keystore 存放key的文件路径加扩展名 -storepass 打包密码。获取包名,在项目的build.gradle(Module:app)里面的applicationId。输入keytool -list -v -keystore debug.keystore,输入cd .android,定位到.android文件夹下。在创建应用里,应用类型选择Android SDK。点击 应用管理->我的应用->创建应用。运行控制台输入cmd,输入命令。运行控制台输入cmd。

2023-12-19 10:49:38 706

原创 Android开发,使用kotlin学习多媒体功能(详细)

获得PendingIntent对象,第一个参数是Context,第二个参数用不到,传入0,第三个参数是一个Intent对象,第四个参数是确定PendingIntent的行为,行为有FLAG_ONE_SHOT,FLAG_NO_CREATE,FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT四种可选。(9)右击res目录->New->Directory,创建一个xml目录,接着右击xml目录->New->File,创建一个file_paths.xml文件。

2023-12-19 10:26:15 1481

原创 Android的启动模式

我们的程序中有一个Activity,这个Activity允许其他程序调用的,那么这个Activity会有一个单独的返回栈来管理,这样不管是哪个应用程序来访问这个Activity,都共用的同一个返回栈,也就解决了共享Activity实例的问题。每启动一个Activity,会判断返回栈的是否存在这个Activity的实例,如果发现已经存在就直接使用这个实例,并把在这个Activity实例以上的所有Activity实例都出栈,如果没有发现就会创建一个新的Activity实例。

2023-11-30 17:43:30 335

原创 [Android]AlertDialog对话框

是Android中常用的对话框组件之一,用于在应用程序中显示一些提示信息、警告、确认信息或者提供用户进行选择的界面。通常用于与用户进行交互,例如要求用户确认某个操作、输入一些信息或者从一组选项中选择一个。,您可以方便地与用户进行交互,并在应用程序中显示各种提示信息和选择界面。来设置对话框的标题、消息、按钮以及其他属性。以下是一个简单的示例,演示如何创建一个简单的。

2023-11-30 17:41:02 323

原创 Android异步之旅:探索IntentService

IntentService是Android中的一个Service类,用于在后台执行耗时操作,而不会阻塞UI线程。它封装了HandlerThread和Handler,使得我们可以方便地在后台执行任务,而不需要自己管理线程和消息处理。以下是 IntentService 的主要特点和用法:自动停止:当所有的请求都被处理完毕后,IntentService 会自动停止,无需手动调用 stopSelf() 方法。

2023-11-30 17:38:44 253

原创 Android异步之旅:探索HandlerThread

当我们在Android应用程序中需要执行一些耗时的任务,比如网络请求、数据库操作或者其他需要在后台线程中执行的操作时,我们通常会使用异步任务来完成这些任务。在Android中,有多种方式来实现异步操作,其中之一就是使用HandlerThread。在本篇博客中,我们将探索HandlerThread,了解它的工作原理以及如何在Android应用程序中使用它来进行异步操作。HandlerThread是Android中的一个类,它继承自Thread类,并且内部包含一个Looper和一个Handler。

2023-11-22 18:11:03 481 1

原创 Android异步之旅:探索AsyncTask

AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终的结果传递给主线程并在主线程中更新UI。两个线程池+HandlerAsyncTask是一个抽象的泛型类,它提供了ParamsProgress和Result这三个泛型参数。其中,🟨Params表示参数的类型🟨Progress表示后台任务的执行进度和类型🟨Result表示后台任务的返回结果AsyncTask类提供了四个核心方法(按照执行顺序介绍):1️⃣在主线程中执行,用于。

2023-11-22 17:52:04 613 1

原创 【Java】集合(三)Map

1.Map接口实现类的特点1)Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value2)Map 中的 key 和 value 可以是任何引用类型的数据,会封装到HashMap$Node对象中3)Map 中的 key 不允许重复4)Map 中的 value 可以重复5)Map 的key 可以为 null,value 也可以为null ,注意 key 为null,只能有一个value 为null ,可以多个6)常用String类作为Map的 key。

2023-11-14 16:18:51 98

原创 【Java】集合(二)Set

HashSet:无序、不重复、无索引LinkedHashSet: 有序、不重复、无索引TreeSet: 可排序、不重复、无索引 ,HashSet 底层是数组+链表+红黑树2)添加一个元素时,先得到哈希值值-会转成-> 索引值(int index=(数组长度-1)&哈希值)3)找到存储数据表table,看这个索引位置是否已经存放的有元素4)如果没有,直接加入5)如果有 , 调用 equals 比较,如果相同,就放弃添加,如果不相同,则添加到最后在6)

2023-11-13 21:49:42 145

原创 【Java】集合(一)单列集合List

List接口是Collection接口的子接口List集合类中元素有序可重复支持索引,List容器中的元素都对应一个整数型的序号,可以根据序号存取容器中的元素。List 集合里添加了一些根据索引来操作集合元素的方法1) void add(int index,Obiect ele):在index位置插入ele元素2)boolean addAll(int index, Collection eles):从index位置开始将eles中的所有元素添加进来。

2023-11-13 12:08:19 719

原创 深入了解JVM和垃圾回收算法

JVM是Java虚拟机(Java Virtual Machine)的缩写,是Java程序运行的核心组件。JVM是一个虚拟的计算机,它提供了一个独立的运行环境,可以在不同的操作系统上运行Java程序。

2023-11-12 21:16:05 684

原创 【Java】注解(Annotation)

就是自己定义注解特殊属性名: value如果注解中只有一个value属性,使用注解时,value名称可以不写!!自定义注解的基本使用:使用上面的自定义注解:就是判断类上、方法上、成员变量上是否存在注解,并把注解里的内容给解析出来。如何解析注解?指导思想:要解析谁上面的注解,就应该先拿到谁比如要解析类上面的注解,则应该先获取该类的Class对象,再通过Class对象解析其上面的注解。

2023-11-12 15:50:57 128

原创 【Java】反射

Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 的反射机制。1.Class也是类,因此也继承Object类2.Class类对象不是new出来的,而是系统创建的3.对于某个类的class类对象,在内存中只有一份,因为类只加载一次4.每个类的实例都会记得自己是由哪个 Class 实例所生成。

2023-11-12 14:20:34 166

原创 接口和抽象类的区别

而抽象类的设计目的,是代码复用。当不同的类具有某些相同的行为(记为行为集合A),且其中一部分行为的实现方式一致时(A的非真子集,记为B),可以让这些类都派生于一个抽象类。当你关注一个操作的时候,用接口抽象类的功能要远超过接口,但是,定义抽象类的代价高。接口的核心是定义行为,即实现类可以做什么,至于实现类主体是谁、是如何实现的,接口并不关心。接口的设计目的,是对类的行为进行约束(更准确的说是一种"有”约束,因为接口不能规定类不可以有什么行为),也就是提供一种机制,可以强制要求不同的类具有相同的行为。

2023-10-11 14:55:46 88

原创 重载和重写的区别

方法重载:(1)在同一个类中(2)方法名必须相同(3)形参列表必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)(4)返回类型无要求 方法重写(1)在父子类中(2)方法名必须相同(3)参数列表完全相同(形参类型、个数、顺序和参数名相同)(4)子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类,比如父类返回类型是Object,子类方法返回类型是String。(5)子类方法不能缩小父类方法的访问权限(public>protected>默认>private):

2023-10-10 18:43:20 123

原创 原码反码补码移码的介绍和计算

比如10000101(-5负数原码)->11111010(反码)->11111011(补码)->01111011(移码)。反码的定义:正数的反码等于本身,负数的反码是符号位保存不变,其余按位取反。补码的引入:反码也有缺点,如果是负数跨零进行计算的话,计算得出的结果不对,这时候,作为反码的补充编码-补码出现。反码出现的原因:原码用符号位来表示正负,所以负号难以和其他数进行计算,反码出现,作为负数的计算救星。(1)原码的最左边那位是符号位,其他位为数据位,符号位是0则为正数,符号位是1则为负数。

2023-10-08 21:13:37 882

原创 final

1.简述final作用?2.为什么局部内部类和匿名内部类只能访问局部final变量?

2023-10-08 16:15:43 87

原创 ==和equals的对比

equals: 是Object类中的方法,Object类中默认也是采用==比较,通常会重写只能判断引用类型,默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。比如看看 Integer 和String。==是一个比较运算符,,==对比的是栈中的值,既可以判断基本类型,又可以判断引用类型,基本数据类型是变量值,引用类型是堆中内存对象的地址。如果判断基本类型,判断的是值是否相等。如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象。也就是判断两个对象是不是同一个对象。

2023-10-08 13:38:14 90

原创 JDK、JRE、JVM三者之间的关系

1.JDK 基本介绍1) JDK 的全称(Java Development Kit Java 开发工具包)JDK = JRE + java 的开发工具 [java, javac,javadoc,javap 等]2) JDK 是提供给 Java 开发人员使用的,其中包含了 java 的开发工具,也包括了 JRE。所以安装了 JDK,就不用在单独安装 JRE 了。

2023-10-08 12:24:24 330

原创 Java 面向对象的三大特性

封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起数据被保护在内部.程序的其它部分只有通过被授权的操作[方法],才能对数据进行操作。继承可以解决代码复用让我们的编程更加靠近人类思维当多个类存在相同的属性变量和方法时可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extends来声明继承父类即可。画出继承的示意图super 代表父类的引用,用于访问父类的属性、方法、构造器。

2023-10-08 11:34:43 82

Android详细介绍POI进行Word操作(小白可进)

POI的jar包

2024-03-22

Android实现的word单词表APP

Android实现的word单词表APP

2023-12-18

空空如也

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

TA关注的人

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