
Android
文章平均质量分 62
尹中文
移动开发者
展开
-
Android中坐标体系知识超详细讲解
一般情况下layout过程会参考measure过程中计算得到的mMeasuredWidth和mMeasuredHeight来安排子视图在父视图中显示的位置,但这不是必须的,measure过程得到的结果可能完全没有实际用处,特别是对于一些自定义的ViewGroup,其子视图的个数、位置和大小都是固定的,这时候我们可以忽略整个measure过程,只在layout函数中传入的4个参数来安排每个子视图的具体位置。该方法可以获取到当前view与屏幕的关系,location(0)代表。原创 2024-12-17 15:15:08 · 1523 阅读 · 0 评论 -
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 · 309 阅读 · 0 评论 -
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 · 595 阅读 · 0 评论 -
Android ConstraintLayout 约束布局的使用手册
目前Android的默认布局早已改成ConstraintLayout,但是很多小伙伴还是使用过去的相对布局,觉得老的布局用起来熟悉,新布局使用复杂,从而失去了探索新大陆的机会,今天就让我们一起揭开ConstraintLayout的面纱,掌握Android新布局的使用方法。传统的布局容易在版本迭代过程中,造成页面层级过多的问题(俄罗斯套娃),一是对页面渲染有影响,二是不利于开发者的后期维护。原创 2024-12-04 10:59:56 · 2521 阅读 · 0 评论 -
Android View事件分发机制深入详细介绍,及主要用来解决什么问题分析
在android开发中会经常遇到滑动冲突(比如ScrollView或是SliddingMenu与ListView的嵌套)的问题,需要我们深入的了解android事件响应机制才能解决,事件响应机制已经是android开发者必不可少的知识。面试找工作的时候也是面试官经常会问的一个问题。原创 2024-12-03 15:05:36 · 1103 阅读 · 0 评论 -
FileProvider高版本使用,跨进程传输文件
高版本的android对的管控抓的很严格,理论上两个应用之间的文件传递现在都应该是用FileProvider去实现,这篇博客来一起了解下它的实现原理。首先我们要明确一点,FileProvider就是一个。原创 2024-11-18 16:47:56 · 1265 阅读 · 0 评论 -
Android 使用反射 反射获取activity
反射(Reflection)是程序的自我分析能力,通过反射可以确定类中有哪些方法、有哪些构造方法以及有哪些成员变量,在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。反射在Andorid中开发应用的比较多,Class对象, Constructor 对象,Method 对象 Field对象各自的常用API要理解并熟练运用, 结合源码多阅读多仿写,相信你也可以carry住反射。原创 2024-09-25 10:26:08 · 1355 阅读 · 0 评论 -
Android图片缓存工具类LruCache原理和使用介绍
trimToSize()利用了LinkedHashMap的特性,当超过限制时候,移除头部的结点,因为头部结点是。常用的三级缓存主要有LruCache、DiskLruCache、网络,其中LruCache对应内存缓存、其次,LruCache使用起来跟HashMap差不多,主要是put()加入缓存、get()获取缓存。我们根据访问动作会来调整顺序,当插入一个结点时候,将该结点插入到队列的尾部,或者,访。trimToSize() 在增加缓存之后会调用,负责整理缓存,超过限制会清除旧的缓存。原创 2024-09-02 11:40:49 · 1474 阅读 · 0 评论 -
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 · 5193 阅读 · 0 评论 -
android混淆编译-proguard通用混淆配置文件编写
【代码】android混淆编译-proguard通用混淆配置文件编写。原创 2023-12-04 16:22:55 · 927 阅读 · 0 评论 -
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 · 8232 阅读 · 0 评论 -
Android 打包aar包含第三方aar 解决方案
因项目需要,打包aar包含第三方aar,如果直接对module进行打包会产生一些问题。错误信息说的很清楚构建aar不支持本地aar文件依赖fat-aar 能将依赖项合并并嵌入到生成的aar文件中。由于fat-aar不再维护,使用起来有诸多需要修改的地方,而不支持高版本的gradle,极其坑爹,踩坑后找到替代方案,支持高版本的gradle无需修改脚本文件。原创 2023-11-24 15:03:37 · 2631 阅读 · 2 评论 -
android中的Package安装、卸载、更新替换流程
android系统在安装,删除,替换,清除数据等与应用相关的动作时,会发出对应的Broadcast,上层的应用通过注册相应的广播事件来做相应的处理。1,ACTION_PACKAGE_ADDED----------当有新的包安装成功的时候,系统会发出此广播。2,ACTION_PACKAGE_REMOVED-----当有包被卸载的时候,系统会发出此广播。3,ACTION_PACKAGE_REPLACED----当有包被更新的时候,系统会发出此广播。上面两种广播的用法,很多朋友也已经很熟悉,通过。原创 2023-10-31 16:37:08 · 2140 阅读 · 0 评论 -
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 · 2476 阅读 · 0 评论 -
DecimalFormat 多语言、本地化指定Locale
DecimalFormat再未指定Locale会使用默认的Locale,不同的Locale会导致格式化时出现出乎预期的现象。如Locale为西班牙时,小数点符号为",“千位分隔符为”."。所以在多语言或者需要本地化的情况下,使用DecimalFormat最好指定Locale避免格式化出现异常。原创 2023-10-09 14:58:00 · 349 阅读 · 0 评论 -
异常解决: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 · 3012 阅读 · 0 评论 -
Android13适配-Google官方照片视频选择器
照片选择器提供了一个直观的界面,便于与您的应用分享照片。照片选择器的界面可供浏览和搜索,并按日期降序向用户显示其媒体库中的文件。如中所示,照片选择器为用户提供了一种安全的内置授权方式,让用户可以仅向应用授予对所选图片和视频的访问权限,而不是对整个媒体库的访问权限。该工具会自动更新,让应用用户能够长期使用扩展的功能,而无需更改任何代码。原创 2023-09-13 18:16:45 · 4015 阅读 · 3 评论 -
Android13-图片视频选择器
在compileSDK = 33 时,谷歌在安卓新增了 图片选择器 功能,支持单选、多选、选图片、视频等操作,并且不需要额外获取照片/音频权限。原创 2023-09-12 17:54:53 · 1320 阅读 · 0 评论 -
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 · 1136 阅读 · 0 评论 -
Android Studio 导入自己编译的 framework.jar
系统级 App 开发,很多时候需要访问 framework 层隐藏的接口(接口前的注释里加了@hide),有时候甚至是定制的系统,在 framework 层加入了新的接口,为了使用这些接口,需要自己编译 framework 的源码生成 jar 包,如果编译 debug 版本,直接把 下面拷出来,如果是 user 版本:Android N/O:Android P/Q:Android R:将framework.jar放在Module的libs下面 添加对 framework.jar 的依赖原创 2022-06-30 15:12:44 · 5059 阅读 · 1 评论 -
MediaPlayer: android 利用mediaplayer播放音频停止后出现mediaplayer went away with unhandled event
项目场景:每次播放下一曲时会先release当前的,再播放下一曲,也会概率出现上面的错误,当出现此错误后,导致播放器不能正常播放下一曲,会回调onCompletion()方法。如题,在onDestory中停止MediaPlayer后概率会上述错误。出现这种状况时需要在release前先reset一下。原创 2023-07-25 11:07:15 · 1047 阅读 · 0 评论 -
RecyclerView 一次性加载大量数据时(2000条音频数据),导致UI线程卡顿,频繁GC的问题
公司项目有这么一个需求,扫描sdCard或U盘的音频数据,并分类展示出来,当数据量比较大时(2000多条数据以上),显示列表慢和滑动列表会很卡。原创 2023-07-24 14:05:59 · 1558 阅读 · 0 评论 -
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 · 3454 阅读 · 3 评论 -
Glide图片加载框架是如何确定图片加载的生命周期
其实这是最简单的一种情况,FragmentActivity、v4 包下的Fragment、还是app 包下的Fragment,最终的流程都是一样的,和Activity 是同步的,如果Activity 被销毁了,Fragment 是可以监听到的,这样Glide 就可以。实现,没什么需要解释的。可以看到,with()方法的重载种类非常多,既可以传入Activity,也可以传入Fragment 或者。with()方法是Glide 类中的一组静态方法,它有好几个方法重载,我们来看一下Glide 类中所。原创 2023-04-24 09:56:40 · 612 阅读 · 1 评论 -
解决Android 应用targetSdkVersion小于24(Android N)运行在高版本设备无法全屏的BUG
进行公司车机设备开发时,由于屏幕比例比较特殊(1920x720),导致部分应用显示时左侧和底部有很大的黑边,使用dumpsys分析黑边的View,移除后发现仍存在,后确定为低版本默认比例问题,耗费了几个小时,记录下这个问题。原创 2023-04-14 10:48:22 · 1423 阅读 · 0 评论 -
bitmap的六种压缩方式,Android图片压缩
以上就是5种图片压缩的方法,这里需要强调,他们的压缩仅仅只是对android中的bitmap来说的。如果将这些压缩后的bitmap另存为sd中,他们的内存大小并不一样。android手机中,图片的所占的内存大小和很多因素相关,计算起来也很麻烦。为了计算出一个图片的内存大小,可以将图片当做一个文件来间接计算,用如下的方法:123或者try {try {123456789101112正在上传…重新上传取消上面两个方法计算的结果是一样的。原创 2023-03-29 15:15:52 · 3049 阅读 · 0 评论 -
安卓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 · 473 阅读 · 0 评论 -
使用RecyclerView实现旋转3D画廊效果
RecyclerView是google官方在support.v7中提供的一个控件,是ListView和GridView的升级版。该控件具有高度灵活、高度解耦的特性,并且还提供了添加、删除、移动的动画支持,分分钟让你作出漂亮的列表、九宫格、瀑布流。先来看下如何简单的使用RecyclerView设置LayoutManager设置Adapter(继承RecyclerView.Adapter)LinearLayoutManger:提供了竖向和横向线性布局(可实现ListView功能)原创 2023-03-22 09:31:13 · 1239 阅读 · 0 评论 -
Android View MotionEvent的getX和getRawX的区别
getRawX是以屏幕左上角为原点(0,0)手触摸到按钮的位置为终点的坐标。getRawY同理。getX是以控件本身的左上角为原点(0,0)手触摸的位置为终点的坐标。原创 2023-02-02 16:28:47 · 665 阅读 · 0 评论 -
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 · 1716 阅读 · 0 评论 -
LinkedList为什么不支持高效的随机访问
那关键的问题我想随即访问一个元素,比如说有1W个元素LinkedList,你现在要访问第9999个元素,他是这么访问的,他先将第一个元素拿出来看下不是,然后找A的引用,再将B拿出来还是不是,然后再找,他就这样一直找啊找,找啊找,在他找第9998还是不是在把9998的引用指向的元素拿出,oh year找到了,然后给你。LinkedList是由链表实现的,针对元素的插入删除比较高效,但是不支持随机访问,只能一个元素一个元素的遍历,数组根据下标支持随机访问。因此,获取最后一个元素比第一个元素花费更多的时间。原创 2023-01-11 17:11:28 · 885 阅读 · 0 评论 -
new Integer(123) 与Integer.valueOf(123) 的区别?他们相等吗?
在jdk 1.8 所有的数值类缓冲池中,Integer 的缓冲池IntegerCache 很特殊, Integer.valueOf(123) 会使用缓存池中的对象,多次调用会取得同一个对。valueOf() 方法的实现比较简单,就是先判断值是否在缓存池中,如果在的话就。这个缓冲池的下界是- 128,上界默认是127,但是这个上界是可调的,在启动。围内的Integer 实例使用自动装箱来创建,那么就会引用相同的对象。在使用这些基本类型对应的包装类型时,如果该数值范围在缓冲池范围内,就可。原创 2023-01-06 15:11:18 · 637 阅读 · 0 评论 -
Android动态获取和使用其他三方APP的Context和Resources图片资源文件
方案:根据目标app的包名创建获取它的Context上下文对象,再通过Context获取Resources对象以及获取里面的图片资源等。需求:三方app想要获取手机默认桌面Launcher App里的壁纸图片资源。原创 2022-12-28 10:01:10 · 947 阅读 · 0 评论 -
进程保活最全实现方案(使用黑、白、灰三种方案,达到不死进程)
进程,与普通的启动方式区别在于,它不会在系统通知栏处出现一个Notification,看起来就。白色保活手段非常简单,就是调用系统api 启动一个前台的Service 进程,这样会在系统的。熟悉Android 系统的童鞋都知道,系统出于体验和性能上的考虑,app 在退到后台时系统并。阿里系的app 后,有可能就顺便把其他阿里系的app 给唤醒了。在系统内存不足的情况下,系统开始依据自身的一套进程回收机制来判断要kill 掉哪些进程,进程的oom_adj 越大,表示此进程优先级越低,越容易被杀回收;原创 2022-12-12 18:01:35 · 1127 阅读 · 0 评论 -
Android Context对象最详细的分析介绍
出于安全原因的考虑,Android 是不允许Activity 或Dialog凭空出现的,一个Activity 的启动必须要建立在另一个Activity 的基础之上,也就是以此形成的返回栈。接子类就是Activity,所以Activity 和Service 以及Application 的Context 是不一样的,只有。们具体Context 的功能则是由ContextImpl 类去实现的,因此在绝大多数场景下,Activity、这三个类虽然分别各种承担着不同的作用,但它们都属于Context 的一种,而它。原创 2022-12-12 17:54:42 · 566 阅读 · 0 评论 -
APP启动流程:从点击应用图标到Activity启动流程
⑤system_server进程在收到请求后,进行一系列准备工作后(同上),再通过binder IPC向App进程发送scheduleLaunchActivity请求;⑧到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。②system_server进程接收到请求后判断,如果不存在目标进程则通过AMS向zygote进程发送创建进程的请求(通过Socket);原创 2022-11-30 14:28:14 · 447 阅读 · 0 评论 -
一个应用程序APP安装到手机上时发生了什么变化
安装和卸载都是通过PackageManager,实质上是实现了PackageManager的远程服务PackageManagerService来完成具体的操作,所有细节和逻辑均可以在PackageManagerService中跟踪查看;所有安装方式殊途同归,最终就回到PackageManagerService中,然后调用底层本地代码的install来完成。原创 2022-11-30 10:25:44 · 366 阅读 · 0 评论 -
Android自定义APP崩溃日志的异常捕捉
如果APP异常退出的话,会在SD卡的根目录下创建一个“applog”的文件夹,错误信息会以.log形式生成在这个文件夹下面,我们只需要拿到这个.log文件,改成.txt格式的就可以查看哪里的错误导致的崩溃问题。如果在用户手机上,我们可以把这些文件上传到我们服务器。开发的时候如果我们的app在客户的手机上运行的时候崩溃了,我们怎么才能拿到我们的错误信息呢?我们只需要将手机产生的异常捕捉下来存在本地SD卡中,然后在下次启动app的时候将SD卡中的错误信息发送到我们的服务器,我们就可以根据错误信息排除问题。原创 2022-11-29 17:50:18 · 623 阅读 · 0 评论 -
Android 静默安装apk方法--兼容了5.1, 6.0, 7.1, 10, 11等各安卓版本
系统级app需要实现静默安装apk的功能,且能兼容各安卓系统版本。原创 2022-11-09 14:56:46 · 3485 阅读 · 2 评论 -
Android 获取音频MP3文件的专辑缩略图
今天介绍另外一种方法,通过MediaMetadataRetriever对象获取,通用方法大家都会想到使用系统媒体库去获取专辑缩略图.原创 2022-11-09 14:14:50 · 1370 阅读 · 0 评论