- 博客(37)
- 收藏
- 关注
原创 【Android】EventBus——进行良好的组件通信
EventBus是一个基于发布/订阅模式的事件总线库。它主要用于Android应用程序中组件之间的通信,允许不同组件(如ActivityFragmentService等)之间进行松耦合的交互。EventBus通过一个中央事件系统来传递消息,这些消息可以是简单的事件对象,也可以是自定义的事件类。使用EventBus可以使程序开销小,代码更优雅,将发送者与接收者解耦。
2024-12-15 15:23:39
1396
原创 【Android】View的工作流程——measure
看到这里你对Activity的构成有一定的了解,每个Activity都有一个与之关联的Window对象,而DecorView是这个Window的根视图。当DecorView被创建以及加载资源的时候,此时它的内容还无法进行显示,因为还没有加载到Window当中。接下来就看看是如何加载的。DecorViewWindow当我们调用Activity的方法的时候,最终调用的是的方法来创建上面的方法是用来创建Activity,里面会调用Activity的onCreate我们看到会调用方法最终调用到了Activity的。
2024-12-08 21:14:37
1019
原创 【Android】ARouter——强大的路由框架
这里是为了让大家更好的理解ARouter。路由是为了实现各个组件之间的通信,不就属于上面的基础组件层,我们在基础组件层新建一个模块名为librouter,此模块下新建一个Router类去实现ARouter的功能。Router的作用就是管理所有的类,可以协调使用这些类,如何进行存储。
2024-12-01 19:19:08
1308
原创 【Android】View的解析—滑动篇
Android系统当中有两种坐标系,分别为Android坐标与View坐标在Android当中我们将左上角的顶点作为Android坐标系的原点,向右为X轴正方向,向下为Y轴正方向,在方法和方法获得的也是Android坐标系的坐标View获取自身的宽和高View自身就有和方法,方法本质是什么:View自身的坐标通过如下方法可以获得View到其父控件ViewGroup的距离:getTop():获取View自身顶边到其父布局顶边的距离getLeft():获取View自身左边到其父布局左边的距离getRight
2024-11-24 21:02:38
1178
原创 【Android】线程池的解析
线程池类型特点适用场景核心线程数最大线程数空闲线程存活时间拥有固定数量的线程,线程数不变。负载较重的服务器,需要限制线程数量的场景。固定固定无根据需要创建新线程,空闲线程会被回收。执行很多短期异步任务的程序。060秒可以安排在给定延迟后运行命令或定期地执行。需要任务在后台定期执行或重复执行的程序。固定固定60秒只有一个线程,所有任务按照提交顺序依次执行。需要保证任务顺序执行的场景。11无文章到这里就结束了!
2024-11-17 11:21:07
980
原创 【Android】轮播图——Banner
Banner轮播图是一种在网页和移动应用界面设计中常见的元素,主要用于在一个固定的区域内自动或手动切换一系列图片,以展示不同的内容或信息。这个控件在软件当中经常看到,商品促销、热门歌单、头像新闻等等。它不同于ViewPgaer在于无需手动进行翻页,它会自动进行轮播,但也可手动滑动到你所要看的页面。接下来就来学习轮播图的使用吧!
2024-11-10 20:10:38
2912
原创 【Android】Java开发语言规范
不允许任何魔法值(即未经定义的常量)直接出现在代码中不要使用一个常量类维护所有常量,按常量功能进行归类,分开维护如果变量值仅在一个范围内变化,且带有名称之外的延伸属性,定义为枚举类。下面正例中的数字就是延伸信息,表示星期几常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。跨应用共享常量:放置在二方库中,通常是 client.jar 中的 constant 目录下。
2024-11-01 16:38:34
1001
原创 【Android】ViewPager与ViewPager2之间的区别
ViewPager 和 ViewPager2 都是 Android 中用于实现滑动页面切换的控件,但ViewPager2是对ViewPager的改进和增强版本。
2024-10-27 23:26:19
1383
原创 【Android】Room—数据库的升级
在Android开发中,数据持久化是一个不可或缺的部分。随着应用的复杂度增加,选择合适的数据存储方式变得尤为重要。Room数据库作为Android Jetpack架构组件之一,提供了一种抽象层,使得开发者能够以更简洁、更安全的方式操作SQLite数据库。本文将带你深入了解Room数据库的基本概念、使用方式以及最佳实践。
2024-10-20 22:31:20
1392
原创 【Android】Jetpack组件之LifeCycle
Lifecycle组件是Android Jetpack架构组件之一,它提供了一种方法来管理Android组件(如Activity、Fragment和服务)的生命周期。Lifecycle组件帮助你执行与生命周期相关联的操作,确保在适当的时间发生适当的事情,例如,当你的应用进入后台时停止数据刷新,或者在应用回到前台时更新UI。
2024-09-30 00:01:47
1391
1
原创 【Android】DataBinding的运用
是 Android Data Binding 库中的一个特性,它允许开发者定义自定义的绑定适配器,从而将属性或方法绑定到 XML 布局文件中的视图上。这些适配器可以用于处理视图的属性,如图片加载、文本格式化、视图可见性等,使得布局文件更加简洁,并且将视图逻辑与业务逻辑分离。
2024-09-22 20:51:14
1726
原创 【Android】Room—数据库的基本操作
在Android开发中,数据持久化是一个不可或缺的部分。随着应用的复杂度增加,选择合适的数据存储方式变得尤为重要。Room数据库作为Android Jetpack架构组件之一,提供了一种抽象层,使得开发者能够以更简洁、更安全的方式操作SQLite数据库。本文将带你深入了解Room数据库的基本概念、使用方式以及最佳实践。
2024-09-15 17:40:16
2936
1
原创 【Android】程序开发组件—探究Jetpack
Jetpack是一个开发组件工具集,它的主要目的是帮助我们编写出更加简洁的代码,并简化我们的开发过程,在这么多的组件当中,最需要我们关注的其实还是架构组件,接下来就对Jetpack的主要架构组件进行学习!
2024-09-06 16:00:47
3565
原创 【Android】Material Design编写更好的UI
对于控件ActionBar我们非常熟悉,就是我们常见的标题栏,但ActionBar只能位于活动的顶部,因此我们更建议使用Toolbar。在新建一个项目的时候都是默认显示ActionBar,我们要使用Toolbar就需要先将标题栏改为不显示:不只用来指定这样一个按钮的颜色,而是更多表达了一个强调的意思,例如一些控件的选中状态也会使用的颜色接下来就看看Toolbar的使用::这个属性我们非常熟悉了,但对于后面进行一下解释,是一个主题属性引用,它引用了当前主题中定义的 ActionBar 的标准高度。
2024-09-01 15:19:21
1956
原创 【Android】跨程序共享数据——内容提供器初识
主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性。目前,使用内容提供器是Android实现跨程序共享数据的标准方式。内容提供器可以选择只对哪一部分数据进行共享,从而保证我们程序中的隐私数据不会有泄漏的风险。
2024-08-04 17:20:15
1157
原创 【Android】数据持久化——数据存储
在你打开完成了一份PPT之后关闭程序,再次打开肯定是希望之前的内容还存在在电脑上,一打开PPT,之前的内容就自动出现了。数据持久化就是将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失。保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则提供了一种机制可以让数据在瞬时状态和持久化状态之间进行转换。
2024-08-04 17:12:57
1448
原创 【Android】Fragment的数据传递
将碎片动态地加载到活动当中,先得到一个碎片,再将其放到活动当中。就想到碎片的替代方法,将我们所要传输的数据直接放到新创建的碎片里面,替换到原来的碎片。我们要将所传输的数据显示在文本框,而在Fragment类中只有一个无参构造,因此在其中加上一个有参构造,当我们创建碎片的时候,就直接把数据传进去了。加入有参构造,注意,此时碎片收到了数据,但是文本框并没有修改,修改所对应的碎片与视图建立联系的时候调用的方法,先得到视图里的TextView的id,将文本内容设置为活动所传输的数据,代码如下:注意:我们需
2024-07-26 21:13:45
908
原创 【Android】Fragment的添加
上一篇文章学到了碎片的创建与生命周期,接下来学习碎片的常用操作,其中会用到上一篇文章的三个碎片,就做一个简单的说明吧:LeftFragment(包含一个按钮)、RightFragment4(以粉色为背景的文本,并在这个碎片中写了所有的回调方法)、AnotherRightFragment(以紫色为背景的文本)每一个Activity都有一个Fragement Manager,用来管理它所包含的Fragement,在使用支持库的时候,使用getSupport-FragmentManager方法来访问Frageme
2024-07-25 21:49:24
1937
原创 【Android】大喇叭——广播
我们先定义一个广播接收器来接收此广播@Override然后与之前一样对AndroidManifest.xml文件进行修改:</</@Override});: 调用setPackage方法并传入当前应用的包名,这限制了广播只在当前应用内传播: 发送一个广播。这个调用会通知所有注册了相同 action 的注意:我们没有这句指令就收不到广播,是因为方法是指定将这个广播发送给那个程序,让隐式的广播转化为显式的广播。在Android8.0以后,静态注册的是无法接受广播的。
2024-07-25 13:34:56
788
原创 【Android】碎片的初识
之前我们学习的是一个活动作为一个页面,有了平板之后,页面如果像手机一样设计就会浪费很多的空间,会有很多的空白区域,为了使屏幕充分利用,引入了碎片这样一个概念。:是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分的利用大屏幕的空间,在平板上应用得非常广泛。
2024-07-22 21:40:53
1048
原创 【Android】常用基础布局
布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,从而编写出精美的界面,布局内不单单可以放控件,也可以嵌套布局,这样可以完成一些复杂的界面,下面就来认识一些常用的布局吧。线性布局名称:LinearLayout,这个布局会将它所包含的控件在线性方向上依次排列属性:android:orientation这个属性就规定了是在竖直方向上还是水平方向上,当为vertical时,规定的排列方向就为竖直方向;当为horizontal时,控件就会在水平方向上排列设置一个主活动,
2024-07-20 14:35:41
1199
原创 【Android】常见控件及使用
控件与布局都继承于视图,因此视图的设置方式对其作用都是一样的,接下来就先讲述视图的不同设置方式paddinggravity二者的取值包括:left、right、top、bottom,还可以用竖线连接各取值,例如”left|top“,朝左上角对齐。
2024-07-16 17:16:55
1198
原创 【Android】活动之间的穿梭
在活动的初学建立了一个简单的活动,但只有一个活动不是过于简单,在你使用手机的时候按下一个按钮可能会跳转到下一个界面,此时就是活动之间的穿梭:使用Intent在活动之间穿梭:是android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。大致可分为和。
2024-07-15 11:54:06
883
原创 【Git】基础操作
版本控制的方式:集中式版本控制工具:版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代码,是必须联网才能工作,局域网或者互联网。个人修改之后要提交到中央版本库例如:SVM和CVS分布式版本控制工具:分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,不需要联网了,因为版本库就在你的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的修改了例如:GitGit的工作流程图。
2024-06-16 16:56:11
1240
1
原创 【数据结构】图论入门
完全图:任意两个点都有一条边相连无向完全图:n个结点就有n * (n - 1) / 2 条边有向完全图:n个结点就有n * (n - 1) 条边稀疏图:有很少的边或者弧的图(通常 m 远小于nlog(n))稠密图:有较多的边或者弧的图(通常 m 大于nlog(n))连通图:在无(有)向图G = (V,{E})中,若对任意两个顶点v、u,都存在v到u的路径,则称G是连通图(强连通图)建立一个顶点表(记录各个顶点信息)和一个邻接矩阵(表示各个顶点之间的关系)
2024-06-07 21:59:24
1589
原创 Java 多线程
我们写的代码存放到了内存当中,需要在CPU上运行,为每一个功能的代码实现时,二者之间开辟了一个通道,方便CPU去内存中提取代码做计算,这个通道称之为“线程”
2024-06-02 13:42:12
1134
原创 Java集合
含有泛型的类1.定义:public class 类名<E>{2.什么时候确定类型:new对象的时候确定类型1. 定义: public class 类名 < E > {} 2. 什么时候确定类型: new 对象的时候确定类型 import java . util . Arrays;int size;size ++;int size;size++;@Override//1含有泛型的方法。
2024-05-26 15:37:23
1262
原创 数据结构KMP算法
在学习数据结构串部分的时候,我们经常遇到经典题型,字符串匹配。我们立刻会想到采用双层循环遍历的方式去匹配,即当字串与主串出现字符不匹配的时候,主串回溯到第二个字符,字串回溯到第一个字符再进行一一匹配,以此类推,设字串长度为n,母串长度为m,则最坏的时间复杂度为O(m * n),没有占用多余的空间,因此空间复杂度为O(1)。当字符串非常长时,所需时间就会很长。步入正题:KMP算法。举一个例子吧:字串为abcabcnm,母串为abcabcdabcabcnm,在匹配时abcabcdabca。
2024-05-17 19:43:32
916
原创 Java语言的三大特性
1.前提:必须有子类继承或者接口实现关系必须有方法的重写(没有重写,多态没有意义),多态主要玩的是重写方法new对象:父类引用指向子类对象Fu fu = new Zi()理解为大类型接收了一个小类型的数据比如:double b = 102.注意:多态下不能直接调用子类特有功能@Override //判断是否为方法重写dog.eat();dog.walk();cat.eat();cat.aaa();
2024-05-12 15:21:26
1937
1
原创 动态规划背包问题之01背包
背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。相似问题经常出现在商业、组合数学,计算复杂性理论、密码学和应用数学等领域中。也可以将背包问题描述为决定性问题,即在总重量不超过W的前提下,总价值是否能达到V?它是在1978年由Merkle和Hellman提出的。
2024-05-03 12:52:31
1307
原创 Java学习之基础必备
Java各整数类型有固定的表述范围和字段长度,不受具体操作系统的影响,以保证Java程序的可移植性。定于long类型的变量,赋值时需要以“l”或“L”作为后缀。Java程序中变量通常声明为int型,除非不足以表示较大的数,才使用long。Java的整型通常默认为int型。
2024-04-28 16:11:50
843
原创 Java数组(基础篇)
概念:是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一的管理。 简称:多个数据的组合。 Java中的容器:数组、集合框架:在内存中堆多个数据的存储。
2024-04-27 13:40:28
935
2
原创 考核题(力扣算法题大一上)
本题一开始采用双层循环遍历的方式去解决,但是会超出时间限制,因此采用所求数字的前缀乘积乘上它的后缀乘积。注意在第一个数字的前缀乘积与最后一个数字的后缀乘积应初始化为1,第一次循环是求数字的前缀乘积,在第二次循环时,不再次设立数组存放后缀乘积,直接让前缀乘积乘上后缀即可。
2024-04-20 21:26:54
720
2
原创 动态规划(股票买卖)
一. 确定dp数组及其下标的含义。(在股票问题当中,数组下标的含义尤为重要,需要明确每一个下标的含义)二. 找出数组元素之间的关系式。(股票问题的关系式相对来说不是很复杂,但是对股票不同时期的划分尤为重要)三. 找出数组元素的初始值。(不同情况下的同一含义的下标初始情况也会不同,具体情况具体分析所得)
2024-04-20 19:20:00
1175
原创 考核题(力扣算法题)
如果无需进行插入操作,则直接使p(所要插入数字的前一个结点)与c(所要插入数字的结点)指针都向后移动一位,如果进行了插入操作,此时p指针所指向的结点已经变成了下一个结点,因此只需要使c指向p的下一个结点。当一个链表为空时,直接返回另一个链表,当两个链表都不为空,进行链表的合并,先设立一个虚拟头结点,进入循环,使其都位于头结点的位置,比较两结点的数字大小,将小的数字结点接在我们所设立的链表之后,再让此数字的指针指向此链表的下一个结点,不断循环,只当有一个指针指向为空,即代表有一个链表为空,退出循环。
2024-04-17 23:14:35
815
原创 单链表的排序(快速排序与插入排序)
(以从小到大为例)插入排序为以第二个数字开始,将每一个数字插入到比它小的数字之前,curr指针所指向的为被插入的结点位置,与前一个结点进行比较,如果它比前一个结点数字小即代表它需要插入。进入内层循环,prev所指向的结点为插入位置的前一个结点,当prev的下一个结点的数字大于我们所要插入的结点数字时,进行插入操作。(以从小到大排序为例)取一个结点设其为关键结点,将所有结点的数字与其比较,比关键结点数字大的放在结点的右边,比关键结点数字小的放在关键结点的左边。因为3比4小因此将3进行插入操作。
2024-04-13 11:38:34
1063
1
原创 单链表的排序(冒泡排序与选择排序)
令所排序列的头指针为原链表的head位置,在一开始排序时所排序列的尾指针也为head,即tail=head,每次查找到未排序数字的最小值时,将这个最小值插入到tail的后面,tail也向后移动一位。内层循环是为了查找除已经排序过的数字中最小的数字,每次设tail的后一个数字为最小值(由min指针所指向),让x指针不断后移,使x指针所指向的数字与min指针所指向数字进行对比,若x所指向数字小于min所指向数字,则使min指向x所指数字。x,y两个指针分别代表所要比较的两个数字的结点位置。
2024-04-07 18:42:08
1188
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人