- 博客(131)
- 资源 (9)
- 收藏
- 关注
原创 释放 PWA 的力量:2025 年的现代Web应用|React + TypeScript 示例
在2024年的Web开发领域,PWA(Progressive Web Apps)已经成为一个不可忽视的技术趋势。这篇文章将探讨PWA的最新发展,并通过实例展示如何构建一个现代PWA应用。PWA本质上是一种将Web应用提升到接近原生应用体验的技术方案。它通过Service Workers、Web Manifest等技术,实现了离线运行、消息推送等传统Web应用难以实现的功能。离线可用:即使在网络不佳时也能正常工作接近原生体验:采用App Shell模型自动更新:无需用户手动操作。
2025-02-11 14:08:44
1127
原创 Android中坐标体系知识超详细讲解
一般情况下layout过程会参考measure过程中计算得到的mMeasuredWidth和mMeasuredHeight来安排子视图在父视图中显示的位置,但这不是必须的,measure过程得到的结果可能完全没有实际用处,特别是对于一些自定义的ViewGroup,其子视图的个数、位置和大小都是固定的,这时候我们可以忽略整个measure过程,只在layout函数中传入的4个参数来安排每个子视图的具体位置。该方法可以获取到当前view与屏幕的关系,location(0)代表。
2024-12-17 15:15:08
1466
原创 Android OnTouchListener & OnTouchEvent & OnClickListener三者之间的关系?
首先是onTouchListener(以下简称TL)和onTouchEvent(以下简称TE),TL是一个接口类,调。motionEvent,后者可以知道touch有哪些相应的Action,并分别处理,CL可以监听控件点击事件。是一种Listener监听机制,而TL可以监听到点击事件在onTouch中处理,并传入两个参数View和。有了这两种事件处理机制,我们可以灵活运用,并获得一个相对更好的用户体验,记住对产品来。都是类里面的方法,我们可以通过这两种方法处理不同的touch交互Action。
2024-12-17 11:16:05
301
原创 Activity 的顶级View-- DecorView加载介绍
相信 Android 开发都知道,View 是树形结构,一组 View 的集合就是ViewGroup,而ViewGroup中又可以包含 View 和其他ViewGroup,从而构成了树结构。那么问题来了,这棵树的根又是什么呢?接下来就让我们一起来探究一下 Android 的顶级 View——DecorView。根据上面的分析,相信你已经明白了DecorView作为根ViewActivity在attch时,会创建对象,在onCreate执行其方法;中会使用来创建一个DecorView对象作为根View;
2024-12-04 17:19:11
586
原创 Android ConstraintLayout 约束布局的使用手册
目前Android的默认布局早已改成ConstraintLayout,但是很多小伙伴还是使用过去的相对布局,觉得老的布局用起来熟悉,新布局使用复杂,从而失去了探索新大陆的机会,今天就让我们一起揭开ConstraintLayout的面纱,掌握Android新布局的使用方法。传统的布局容易在版本迭代过程中,造成页面层级过多的问题(俄罗斯套娃),一是对页面渲染有影响,二是不利于开发者的后期维护。
2024-12-04 10:59:56
2470
原创 Android View事件分发机制深入详细介绍,及主要用来解决什么问题分析
在android开发中会经常遇到滑动冲突(比如ScrollView或是SliddingMenu与ListView的嵌套)的问题,需要我们深入的了解android事件响应机制才能解决,事件响应机制已经是android开发者必不可少的知识。面试找工作的时候也是面试官经常会问的一个问题。
2024-12-03 15:05:36
1100
原创 FileProvider高版本使用,跨进程传输文件
高版本的android对的管控抓的很严格,理论上两个应用之间的文件传递现在都应该是用FileProvider去实现,这篇博客来一起了解下它的实现原理。首先我们要明确一点,FileProvider就是一个。
2024-11-18 16:47:56
1240
原创 Android 使用反射 反射获取activity
反射(Reflection)是程序的自我分析能力,通过反射可以确定类中有哪些方法、有哪些构造方法以及有哪些成员变量,在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。反射在Andorid中开发应用的比较多,Class对象, Constructor 对象,Method 对象 Field对象各自的常用API要理解并熟练运用, 结合源码多阅读多仿写,相信你也可以carry住反射。
2024-09-25 10:26:08
1315
原创 Android图片缓存工具类LruCache原理和使用介绍
trimToSize()利用了LinkedHashMap的特性,当超过限制时候,移除头部的结点,因为头部结点是。常用的三级缓存主要有LruCache、DiskLruCache、网络,其中LruCache对应内存缓存、其次,LruCache使用起来跟HashMap差不多,主要是put()加入缓存、get()获取缓存。我们根据访问动作会来调整顺序,当插入一个结点时候,将该结点插入到队列的尾部,或者,访。trimToSize() 在增加缓存之后会调用,负责整理缓存,超过限制会清除旧的缓存。
2024-09-02 11:40:49
1470
原创 Java 生产者消费者模式介绍
的基本线程数就把任务扔到阻塞队列里,这种做法比只使用一个阻塞队列来实现生产者和消费者模式显然要高明很多,因为消费者能够处理直接就处理掉了,这样速度更快,而生产者先存,消。来处理不同性质的任务,比如线程池1将数据读到内存之后,交给线程池2里的线程继续处理压缩。在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一。要继续处理,于是消费者处理完数据之后,它又要作为生产者把数据放在新的队列里,交给其他。
2024-06-06 11:20:48
526
1
原创 Android 14 应用适配指南
在Android 14,app可以在系统分享表中自定义行为。在分享表中,可借助ChooserAction.Builder来构建自定义ChooserAction,指定ChooserActions的列表作为使用Intent.createChooser创建的Intent的Intent.EXTRA_CHOOSER_CCUSTOM_ACTIONS。以下是创建自定义行为的一般过程以发送多张图片为例//创建Intent//各种类型的图像//添加自定义行为的intentmContext,1,
2023-12-15 16:16:21
5148
原创 Android 透明度颜色值对照表
比如:50%透明度, 50%也就是256的一半即128,因为是从0开始算的,所以是 127,转换成16进制就是 7F。Android中的颜色值通常遵循RGB/ARGB标准,使用时通常以“#”字符开头,以16进制表示。透明度分为256个等级,即 0~255,00表示完全透明,FF开始表示完全不透明。Android中的颜色值一般格式是:#AARRGGBB。也可以通过设置字体颜色,或者设置背景色来达到预期效果。我们的UI小姐姐就喜欢给。注:00是完全透明,FF就是完全不透明。,这个需要自己判断一下。
2023-12-04 12:01:16
8114
原创 Android 打包aar包含第三方aar 解决方案
因项目需要,打包aar包含第三方aar,如果直接对module进行打包会产生一些问题。错误信息说的很清楚构建aar不支持本地aar文件依赖fat-aar 能将依赖项合并并嵌入到生成的aar文件中。由于fat-aar不再维护,使用起来有诸多需要修改的地方,而不支持高版本的gradle,极其坑爹,踩坑后找到替代方案,支持高版本的gradle无需修改脚本文件。
2023-11-24 15:03:37
2597
2
原创 android中的Package安装、卸载、更新替换流程
android系统在安装,删除,替换,清除数据等与应用相关的动作时,会发出对应的Broadcast,上层的应用通过注册相应的广播事件来做相应的处理。1,ACTION_PACKAGE_ADDED----------当有新的包安装成功的时候,系统会发出此广播。2,ACTION_PACKAGE_REMOVED-----当有包被卸载的时候,系统会发出此广播。3,ACTION_PACKAGE_REPLACED----当有包被更新的时候,系统会发出此广播。上面两种广播的用法,很多朋友也已经很熟悉,通过。
2023-10-31 16:37:08
2114
原创 Android Studio Gradle中没有Task任务,没有Assemble任务,不能方便导出aar包
可以通过设置File->setting -->Experimental→取消勾选“Do not build Gradle task list during Gradle sync"Sync完成后,在Gradle里就有Tasks了,这样通过Assemble就能快速的编译aar release包了。1. 在编译aar包或者编译module的时候,没有release包,我们一般都是通过assemble进行编译。②然后通过File→Sync Project with Gradle Files。
2023-10-23 11:41:10
2435
原创 DecimalFormat 多语言、本地化指定Locale
DecimalFormat再未指定Locale会使用默认的Locale,不同的Locale会导致格式化时出现出乎预期的现象。如Locale为西班牙时,小数点符号为",“千位分隔符为”."。所以在多语言或者需要本地化的情况下,使用DecimalFormat最好指定Locale避免格式化出现异常。
2023-10-09 14:58:00
343
原创 异常解决:android.database.sqlite.SQLiteBlobTooBigException: Row too big to fit into CursorWindow
问题如何引起:解析出音乐专辑图片时,需要把图片转byte数组存入数据库,当下次查询数据库该专辑数据时报上面错误,行太大而无法写入CursorWindow(CursorWindow默认的最大值为2MB)第二个参数cursorWindowSize设置大小, 这里修改CursorWindow的大小为5M。图片入库数据库时,先对图片进行压缩处理,尽量控制其大小在2M内。设置一下CursorWindow的大小即可。
2023-09-18 19:52:57
2956
原创 Android13适配-Google官方照片视频选择器
照片选择器提供了一个直观的界面,便于与您的应用分享照片。照片选择器的界面可供浏览和搜索,并按日期降序向用户显示其媒体库中的文件。如中所示,照片选择器为用户提供了一种安全的内置授权方式,让用户可以仅向应用授予对所选图片和视频的访问权限,而不是对整个媒体库的访问权限。该工具会自动更新,让应用用户能够长期使用扩展的功能,而无需更改任何代码。
2023-09-13 18:16:45
3947
3
原创 Android13-图片视频选择器
在compileSDK = 33 时,谷歌在安卓新增了 图片选择器 功能,支持单选、多选、选图片、视频等操作,并且不需要额外获取照片/音频权限。
2023-09-12 17:54:53
1312
原创 java内存中有哪些内存空间:栈空间,堆空间,和方法区介绍
位于“=”前的p1是一个在main()方法中定义的变量,可见,它是一个局部变量,因此,它被会添加到了执行main()方法的主线程的JAVA方法调用栈中。接着,Java虚拟机定位到方法区中Test类的Main()方法的字节码,开始执行它的指令。中的Person实例,再根据Person实例持有的引用,定位到方法去中SPerson类的类型信息,从而获得print()方法的字节码,接着执行print()方法包含的指令。的引用,实际上指的是Person类的类型信息在方法区中的内存地址,其实,就是有点类似于C 语。
2023-08-31 15:29:53
331
原创 RecyclerView数组越界异常java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position
在进行数据移除和数据增加时,务必要保证Adapter中的数据和移除的数据保持一致!就是如果你更新你的集合后,调用Adapter的新出现的notifyxxxx方法时,adapter 的更新预期结果和实际集合更新结果不同,那么就会出现异常了。数据一致其实说的是要保证数量一致。就是说Adapter有个size,你的集合有个size。反复插拔U盘触发音频自动扫描,导致可能集合list的size变了,但未及时通知Adapter刷新数据就出错了。1).方案一:将集合list和adapter的list隔开。
2023-08-01 17:34:28
1114
原创 MediaPlayer: android 利用mediaplayer播放音频停止后出现mediaplayer went away with unhandled event
项目场景:每次播放下一曲时会先release当前的,再播放下一曲,也会概率出现上面的错误,当出现此错误后,导致播放器不能正常播放下一曲,会回调onCompletion()方法。如题,在onDestory中停止MediaPlayer后概率会上述错误。出现这种状况时需要在release前先reset一下。
2023-07-25 11:07:15
1037
原创 RecyclerView 一次性加载大量数据时(2000条音频数据),导致UI线程卡顿,频繁GC的问题
公司项目有这么一个需求,扫描sdCard或U盘的音频数据,并分类展示出来,当数据量比较大时(2000多条数据以上),显示列表慢和滑动列表会很卡。
2023-07-24 14:05:59
1540
原创 SurfaceView出现ANR:Surface has already been released的解决办法
项目中有这样一种场景会引起SurfaceView出现ANR,在主Activity中创建并使用SurfaceView,然后不停的进入子ActivityB ,返回主Activity再进入子ActivityB这样循环,就会出现ANR的问题。产生ANR的原因:简而言之,处于在lockCanvas和unlockCanvasAndPost之间时,SurfaceView销毁了,导致unlock失败,出现了死锁。第四步:SurfaceView重新创建,尝试lock,因为上次的锁没有释放,所以进入了无限等待。
2023-04-27 14:43:56
3437
4
原创 Glide图片加载框架是如何确定图片加载的生命周期
其实这是最简单的一种情况,FragmentActivity、v4 包下的Fragment、还是app 包下的Fragment,最终的流程都是一样的,和Activity 是同步的,如果Activity 被销毁了,Fragment 是可以监听到的,这样Glide 就可以。实现,没什么需要解释的。可以看到,with()方法的重载种类非常多,既可以传入Activity,也可以传入Fragment 或者。with()方法是Glide 类中的一组静态方法,它有好几个方法重载,我们来看一下Glide 类中所。
2023-04-24 09:56:40
610
1
原创 解决Android 应用targetSdkVersion小于24(Android N)运行在高版本设备无法全屏的BUG
进行公司车机设备开发时,由于屏幕比例比较特殊(1920x720),导致部分应用显示时左侧和底部有很大的黑边,使用dumpsys分析黑边的View,移除后发现仍存在,后确定为低版本默认比例问题,耗费了几个小时,记录下这个问题。
2023-04-14 10:48:22
1409
原创 bitmap的六种压缩方式,Android图片压缩
以上就是5种图片压缩的方法,这里需要强调,他们的压缩仅仅只是对android中的bitmap来说的。如果将这些压缩后的bitmap另存为sd中,他们的内存大小并不一样。android手机中,图片的所占的内存大小和很多因素相关,计算起来也很麻烦。为了计算出一个图片的内存大小,可以将图片当做一个文件来间接计算,用如下的方法:123或者try {try {123456789101112正在上传…重新上传取消上面两个方法计算的结果是一样的。
2023-03-29 15:15:52
2999
原创 安卓Activity Dialog和Toast 的Window 创建过程
的handleResumeActivity 方法中,首先会调用Activity 的onResume 方法,在ActivityThread。Activity 的attach 方法里,系统会创建所属的Window 对象并设置回调接口,PolicyManager 的makeNewWindow 方法完成的,创建后的对象实际就是。Toast 内部的视图由两种方式,一种是系统默认的样式,另一种是setView 指。在Activity 的创建过程中,最终会由ActivityThread 的。Toast 里的TN 接口。
2023-03-24 09:39:28
472
原创 使用RecyclerView实现旋转3D画廊效果
RecyclerView是google官方在support.v7中提供的一个控件,是ListView和GridView的升级版。该控件具有高度灵活、高度解耦的特性,并且还提供了添加、删除、移动的动画支持,分分钟让你作出漂亮的列表、九宫格、瀑布流。先来看下如何简单的使用RecyclerView设置LayoutManager设置Adapter(继承RecyclerView.Adapter)LinearLayoutManger:提供了竖向和横向线性布局(可实现ListView功能)
2023-03-22 09:31:13
1222
原创 Android View MotionEvent的getX和getRawX的区别
getRawX是以屏幕左上角为原点(0,0)手触摸到按钮的位置为终点的坐标。getRawY同理。getX是以控件本身的左上角为原点(0,0)手触摸的位置为终点的坐标。
2023-02-02 16:28:47
661
原创 Android studio 护眼模式配置、字体大小设置、内存大小设置等各类疑难杂症
使用命令连接手机的ip地址,进行无线连接 adb connect 192.168.1.1:5555,出现connected to 192.168.1.1:5555 ,表示连接成功,查看androidstudio,可以找到设备并进行无线调试。点击“设置”选项,弹窗后选择“设备”按钮,点击左侧的“自动播放”选项,在右侧列表中,找到你手机的照片默认设置项,修改默认设置为“不执行操作”即可关闭照片弹窗程序。工具栏添加快捷工具图标,工具栏名称是Navigation Bar ,里面只有拉取,提交,历史,回滚;
2023-01-30 18:45:38
1714
原创 HashMap的负载因子为什么不设置成1
从代码中我们可以看到,在向HashMap中添加元素过程中,如果 元素个数(size)超过临界值(threshold) 的时候,就会进行自动扩容(resize),并且,在扩容之后,还需要对HashMap中原有元素进行rehash,即将原来桶中的元素重新分配到新的桶中。那就是当其中的元素个数达到临界值的时候,而这个临界值前面说过和loadFactor有关,换句话说,设置一个合理的loadFactor,可以有效的避免哈希冲突。负载因子为log(2)的时候,可以既减少哈希冲突,又浪费空间,是时间和空间的权衡。
2023-01-14 11:25:06
861
原创 数据结构与算法4—队列
(1)表示空队列, rear==front==0。(4)A出队后,rear==front==3。再插入元素时,会出现假溢出的情况。3.出队列 OutQueue(&Q,&e) 将队列Q的队头元素删除,并用e返回其值,也称“退队”、“删除”。循环队列的物理存储未发生任何改变,其只是充分利用数组空间,想象将数组的首尾连接起来,形成一个循环队列。(c)B,C依次入队后, rear==3, front==0。(b)元素A入队后, rear==1, front==0。(a)表示空队列, rear==front==0。
2023-01-12 15:57:14
558
原创 数据结构与算法3—栈
采用顺序存储结构的栈简称为顺序栈。是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设整型变量top指示栈顶元素在顺序栈中的位置。top栈顶指针,惟一的确定一个链栈。链栈通常带有一个表头结点,所以top->next才指示栈顶元素。栈的几种状态(最大长度MaxSize为4):栈空、压栈、栈满、出栈。
2023-01-12 14:12:39
711
原创 数据结构与算法2—链表
在单链表中,最后一个结点的指针域为空。访问单链表中任何数据只能从链表头开始顺序访问,而不能进行任何位置的随机查询访问。如要查询的结点在链表的尾部则需遍历整个链表。所以单链表的应用受到一定的限制。双向链表用两个指针表示结点间的逻辑关系。其增加了一个指向直接前驱的指针域,这样形成的链表有两条不同方向的链,前驱和后继,因此称为双链表。操作①必须在操作③之前完成,否则*p的前驱结点就丢掉了。它将单链表中最后一个结点的指针指向链表的头结点,使整个链表头尾相接形成一个环形。带头结点且有n个结点的循环双链表。
2023-01-12 11:46:44
662
原创 数据结构与算法1—线性表
优点:顺序表中的任意数据元素的存储地址可由公式直接导出,因此顺序表可以“随机存取”其中的任意元素。数据结构的运算是定义在逻辑结构层次上的,而运算的具体实现则是建立在存储结构上的。(6)在线性表中删除元素:DeleteList(L,i)(5)插入新元素:InsertList(L,i,e)(7)把已有线性表置为空表:ClearList(L)(2)求线性表L的长度:GetLength(L)(4)按值查找:LocateList(L,e)(3)按序号取元素:GetNode(L,i)表中数据元素的类型是相同的。
2023-01-12 11:02:45
499
原创 数据结构与算法0—大纲
算法的特征:有穷性、确定性、可行性、输入(>=0)、输出(>=1)图大概一共有4中存储方式:邻接矩阵,邻接表,边集数组,十字链表。算法:是指解题方案的准确而完整的描述,是一系列解决问题的清晰。,算法代表着用系统的方法描述解决问题的策略机制.是指相互之间存在着一种或多种关系的。线性结构代表性结构有:线性表、 栈、队列。算法效率的度量:时间复杂度、空间复杂度。十字链表是有向图的一种链式存储结构。非线性结构代表性结构有:树、图。元素的集合和该集合中数据。
2023-01-12 10:46:21
317
plugin_core.jar android Launcher3 androidstudio环境编译缺少的jar包
2020-12-23
launcher_protos.jar android Launcher3 androidstudio环境编译缺少的jar包
2020-12-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人