自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(2890)
  • 资源 (6)
  • 收藏
  • 关注

转载 AGP8.0 ASM 更简单灵活了

在之前《Gradle Transform + ASM 探索》一文中讨论了使用 AGP 提供的 Transform 接口自定义Gradle插件,通过 ASM 进行代码插桩。实现一些类似方法耗时统计,批量添加点击事件做埋点的功能。但是随着 AGP8.0 的到来,Transform 接口已经被废弃了,至于废弃的原因官方解释也是很官方了。说白了,就是不好用,传统的 Transform API 增加编译耗时。同时提供了更好用的 API 来规避一些编译时的问题。

2024-07-17 17:11:07 22

转载 AGP 8.0 路由框架新思路

说到路由又是老生长谈了,阿里的ARouter、美团的WMRouter这些老牌知名度很高的路由框架。由于 AGP 8.0 以后不能支持,Github 上也有很多人提了PR,Issues 里边也有很多个开发了支持8.0 的插件。去年我为了支持 AGP 8.0 以及 KSP, 也写了一个路由框架LRouter。新框架难免会有很多问题,刚好公司有一个新项目要做,我自己在公司的项目中第一个接入的,踩了半年的坑,也基本上稳定了下来。在这里把遇到的一个很致命的编译问题分享一下解决的思路。

2024-07-17 16:55:35 13

转载 彻底搞懂kotlin协程,全网唯一,手撸协程

线程,线程池,EventLoop,Future 是异步的基础,也是 Kotlin 协程的骨架。结构化并发设计,挂起与恢复机制,语言级的状态机是 Kotlin 协程的灵魂,在前面 5 篇我们分别从骨架讲到灵魂,然后本篇我们综合利用这些知识构建了一个自己的极简版协程,灵肉自此合一,相信在看完这几篇文章之后我可以说你已经彻底掌握了 Kotlin 协程。历时近两个月,到这里,这个协程系列的主要部份就已经讲完了。全网唯一,手撸Flow😄。下一篇我们从 Flow 基础开始。示例源码练习。

2024-07-17 16:17:06 30

转载 使用HTML.fromHtml为文字设置颜色和大小

由于项目需求需要实现一个TextView中含有不同大小不同颜色的文本,但TextView本身根本无法实现,出于写法的精简性我又不想另外多写几个TextView,所以打算采用HTML类中的fromHtml函数通过html标签解析实现。

2024-07-16 13:51:49 20

转载 TextView使用Html.formHtml()解析带base64图文混编的内容

【代码】TextView使用Html.formHtml()解析带base64图文混编的内容。

2024-07-16 13:47:42 8

转载 lineSpacingExtra textview无作用

如果你在使用 LinearLayout 或者 RelativeLayout 作为容器,确保没有其他布局参数会影响行间距,例如。在 TextView 中无效,可能的原因是你使用的是 Android 的旧版本,或者是在某些特定的布局条件下不起作用。如果你正在使用自定义的 TextView 或者 Layout,确保没有覆盖或重写会影响行间距的方法。如果上述方法都不能解决问题,尝试使用其他方法增加行间距,例如通过自定义 TextView 并重写。如果问题依然存在,请提供更多的代码和上下文信息以便进一步诊断。

2024-07-16 13:30:42 11

转载 系统中设置TextView的行间距

2、设置行间距的倍数:android:lineSpacingMultiplier,取值范围:浮点数,如果值大于1.0表示增加行间距,如果值小于1.0表示减少行间距,等于1.0时表示无变化。1、设置行间距:android:lineSpacingExtra,取值范围:正数、负数和0,正数表示增加相应的大小,负数表示减少相应的大小,0表示无变化。为了让每行保持一定的行间距,可以设置属性android:lineSpacingExtra或android:lineSpacingMultiplier。

2024-07-15 21:35:34 12

原创 隐掉edittext 输入时带下划线

隐掉edittext 输入时带下划线

2024-07-15 18:30:28 79

转载 Android edittext 输入时带下划线

在 Android 中输入编辑文本字段时,我需要删除下划线.对于名字,编辑文本的第一个字母应该是大写的,所以我已经给出了,但在我的例子中,我在 edittext 字段中看到了下划线.如何删除它?

2024-07-15 15:46:12 13

转载 movetasktoback的作用

如果设置为 `false`,无论 Activity 是否是任务的根,都会执行移至后台的操作。- 模拟主屏幕操作: 有时候,开发者希望提供一种方式,让用户能够退出应用,但又不完全关闭它,使得应用可以快速重启。这段代码通常会覆盖 `Activity` 中的 `onBackPressed()` 方法,以改变 Back 按钮的默认行为,使得应用退到后台而不是立即退出。- 这个方法不会影响 Activity 的生命周期,Activity 依然会按照正常流程调用 `onPause()`、`onStop()` 方法等。

2024-07-12 16:13:59 33

转载 退到桌面 moveTaskToBack

在上述代码中,我们首先在布局文件中添加了一个按钮,用于触发“退到桌面”的操作。然后在Activity中找到这个按钮,并设置了点击事件,在点击事件中调用了moveTaskToBack方法,将应用退到后台。通过以上步骤,你就可以成功实现“Android 退到桌面 moveTaskToBack”的功能了。2 在按钮的点击事件中调用moveTaskToBack方法,将应用退到后台。1 创建一个按钮,用于触发“退到桌面”的操作。

2024-07-12 16:12:39 23

转载 Activity Deeplink启动来源获取源码分析

mReferrer很容易通过重写context的getBasePackageName()被伪造,在使用时一定要小心。通过ActivityManageService获取的Uid是无法被伪造的,可以考虑使用Uid来转换PackageName。作者:vivo互联网技术链接:https://juejin.cn/post/7030977861691375629来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2024-07-12 10:30:14 23

转载 在Activity中获取调用者包名,以及如何通过伪造mReferrerr让Activity无法获取调用者的包名

但是在Activity中,我们是无法touch到Binder线程的。如果这个值是SystemServer中填充的,然后发送到App中的,那么可以认为无法伪造,但是如果这个值依赖于调用者的传入,那么很可能可以被伪造。可以看到,我们调用startActivity的时候,并没有传入callingPackage参数,但是当调到ActivityManagerService的startActivityAsUser方法的时候,却出现了callingPackage参数,所以,肯定是调用流程中间的某一步,加入了这个参数。

2024-07-12 10:23:08 15

转载 解决No Activity found to handle Intent

activity

2024-07-11 21:03:53 18

转载 Android实战场景 - 限制EditText仅支持输入数字、英文、汉字,禁止输入表情等特殊符号

EditText相关Blog基本认知起初我以为有俩种方式可以实现这个功能第一种 键盘弹出不显示表情选项,从根源解决问题(失败,因为每个手机的Rom烧制都是固定的,很难去操作,主要是水平有限)第二种 正常显示表情选项,但是输入之后EditText进行过滤,不做显示处理,这样我们传输的时候就不会出现错误后来再回头的看的时候,发现常见的有俩种方式实现我们的需求通过 正则过滤禁止输入的内容(也就是上方的第二种方式)通过 三方框架 做处理,大多实现原理相同自定义TextWatcher + 正则过滤限制正则:

2024-07-10 13:50:58 39

转载 EditText限制输入表情和特殊符号的处理

Android EditText限制输入表情和特殊符号的处理

2024-07-10 13:41:04 19

转载 Drag Select Compose:实现多平台图片多选功能的利器

Drag Select Compose库使我们能够轻松实现复杂的图片多选功能,同时支持多种平台。通过该库,我们不仅可以简化开发流程,还可以为用户提供流畅的交互体验。希望通过这篇博客,您能更好地理解和应用这一强大的工具。了解更多信息,请访问DragSelectCompose文档Drag Select Compose:实现多平台图片多选功能的利器。

2024-07-08 10:48:20 20

转载 为什么 kotlin 使用协程,放弃多线程

为什么 kotlin 使用协程?这是一个非常好的问题,我们都知道协程好,那么协程相比于线程好在哪里呢,这篇文章我们一起聊聊 kotlin 使用协程的原因。

2024-07-05 19:05:04 27

转载 优雅实现网络请求:协程+Flow+Retrofit+OkHttp

使用协程+Flow+Retrofit+OkHttp,我们可以优雅地实现网络请求。我们可以将网络请求抽象为一个数据流,并用一个简单的函数来描述网络请求的过程。这种方法使得代码更加简洁、易读,更易于理解和维护。优雅实现网络请求:协程+Flow+Retrofit+OkHttp。

2024-07-05 16:01:56 50

转载 Binder对象存储在哪里,谁引用了它

了解完这个过程之后,我们依次回答一下上面的问题。多个客户端都去 bind 同一个 service,那么 service 返回的是同一个 stub 对象,还是多个 stub 对象无论有多少客户端绑定到同一个 Service,Service 通常返回的是同一个 Stub 对象的引用,所有客户端共享同一个 Service 的 Stub 对象。这种设计使得 Service 能够有效地管理和维护所有的客户端连接,同时避免了无谓的资源开销与复杂度。

2024-07-05 15:58:05 14

转载 判断ViewStub是否被inflate 过的方式。

我们在使用ViewStub的时候,一般ViewStub都是特定条件出发inflate的。这种触发条件有多个的时候(或者有多处ViewStub的inflate 代码时)我们往往需要判断ViewStub之前有没有inflate过。所以每次在inflate的时候重新findViewById去页面中寻找一下ViewStub,如果返回值不为null则ViewStub没有被inflate过。2.利用ViewStub的parent来判断。当ViewStub被inflate后,getParent返回值是null。

2024-07-04 20:27:36 16

转载 viewstub如何使用databinding

在Android开发中,ViewStub是一个轻量级的View,用于在布局中延迟加载其他View。假设我们有一个Activity布局,其中包含一个Button和一个ViewStub。在Activity中,我们需要绑定ViewModel和布局,并根据isTextViewLoaded的状态来显示或隐藏ViewStub。首先,我们需要在xml布局文件中定义Activity的主要布局,包括一个Button和一个ViewStub。接着,我们需要准备ViewStub的布局文件,这里我们使用一个简单的TextView。

2024-07-03 19:41:17 27

转载 代码动态写 viewstub

在Android中,ViewStub是一个不可见的,大小为0的View,在布局优化中起着重要的作用。ViewStub可以在布局文件中占位,当需要显示ViewStub中的内容时,通过调用。在实际的应用场景中,你可能需要根据条件动态决定是否要替换ViewStub中的内容,或者要替换成什么样的布局。方法,该ViewStub占位符会被替换为指定的布局资源。如果你想要动态地写ViewStub,你可以在代码中使用。是你在XML布局文件中定义的ViewStub的ID,是你想要ViewStub替换成的布局资源的ID。

2024-07-03 18:53:43 9

转载 Gradle 依赖管理:告别 buildSrc 拥抱 Catalogs

本文介绍了三种比较推荐的做法,BuildSrc + Kotlin DSL ,Catalogs + Groovy DSL,Catalogs + Kotlin DSL并且这三种方式各有利弊。BuildSrc + Kotlin DSL 的方案的主要特点是编译会稍慢,可能需要处理依赖版本冲突问题,好处是熟悉的Kotlin语法,与良好的代码导航支持。

2024-07-03 10:27:07 16

转载 Android自定义ViewGroup的滚动与惯性滚动效果实现的不同组合方式

使用 GestureDetector 可以帮助我们快速实现检测手势,比如单击、双击、长按、滑动,惯性等。它是谷歌给我们的快速实现类,缺点是不方便自定义。使用 VelocityTracker 可以帮助我们计算触摸事件的速度和方向,比如滑动的速度和方向。它是用于惯性和滑动方向判断的底层类,可以方便自定义。使用 Scroller 可以在视图中实现平滑滚动效果。虽然 Scroller 自身不直接使视图滚动,它通过内部跟踪和计算滚动的位置,确保滚动操作看起来平滑连贯。

2024-07-03 10:15:26 14

转载 Android14 开发之Broadcast延迟及Service常驻等新特性说明

通过以上步骤,您可以在 Android 13 中根据Intent的action启动服务,并确保服务在后台运行时不会被系统终止。使用前台服务可以确保服务的持久性,并且可以处理新的权限要求和行为变化。Android14 开发之Broadcast延迟及Service常驻等新特性说明。

2024-07-03 10:07:46 38

转载 android 国家代码

在 Android 开发中,我们经常需要获取设备的国家或地区代码。国家代码是一个用于唯一标识世界各个国家和地区的标识符,它是由国际标准化组织(ISO)定义的。对于 Android 开发者来说,了解和使用国家代码可以帮助我们更好地适配不同的语言和地区。

2024-06-26 10:18:11 51

转载 Android生成heap dump文件(.hprof)

它保存为一种叫做HPROF的二进制格式。对于Android运行android.os.Debug.dumpHprofData(hprofPath)方法后所生成的文件,须要把.hprof文件从Dalvik格式转换成J2SE HPROF格式。使用AndroidSDK提供的hprof-conv工具可运行该转换操作。一个heap dump就是一个程序heap的快照,能够获知程序的哪些部分正在使用大部分的内存。

2024-06-25 10:54:01 58

转载 协程(3) | runBlocking和async启动协程

的主要作用是连接协程和线程,我们要少用。一方面是会阻塞线程执行,另一方面是它会等待它的子协程执行完成。async创建的协程就像是钓鱼,把鱼竿抛出去我们继续干活。await是获取协程结果,它是挂起函数,把后面继续执行的操作给挂起来,等获取到结果再继续。作者:yuanhao链接:https://juejin.cn/post/7091443219505872904来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2024-06-25 10:42:55 28

原创 BuildConfig类找不到,BuildConfig.java类不在编译加载路径问题解决

原因是buildConfigField脚本写在了testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"脚本之后;

2024-06-21 17:53:42 358

转载 Android编译优化之kapt优化

注解处理器(Annotation Processor)是一种在编译时扫描和处理注解的工具,它可以自动化生成代码、检查代码的正确性、生成文档等。在Android中使用过四种注解处理器:在Android平台,最先支持注解生成代码的库,是由个人开发者提供的一个插件,即android-apt。它只支持javac的方式,使用时需要引入插件 'com.neenbedankt.gradle.plugins:android-apt:1.8'。APT。

2024-06-20 14:00:12 158

转载 用于指定视图在无障碍模式android:importantForAccessibility

是Android中的一个属性,用于指定视图在无障碍模式下的重要性。例如,如果你不想让某个视图在无障碍模式下被通知,你可以将其设置为。将不会在无障碍模式下被通知,因为我们将。在XML布局文件中设置。

2024-06-20 13:50:55 78

转载 基础-WeakReference

这四种状态只是一种说明,实际上Reference对象并没有任何的status字段,不过作为队列中的节点,它有一个next字段,当状态为Active时,其next为null,而当其为其它状态时,next一定不为null,而是指向队列中的下一个引用,如果其本身就是队列中的最后一个元素,则next指向其自身。可见,referent属性存储了其所引用的对象,而queue这个字段是可选的,前面说到,queue的作用保存对象将被回收的引用,由垃圾回收器负责往里面添加,但如果不提供,则没有这一过程。

2024-06-20 09:59:56 45

转载 Settings.Global设置使用数据

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/love_techlive/article/details/106830483。

2024-06-20 09:54:42 79

转载 在Android M及更高版本中使用 Settings.System 抛出异常“You cannot keep your settings in the secure settings. “

1. 如果对targetSDK没有要求,则将targetSDK降为Build.VERSION_CODES.LOLLIPOP_MR1以下,利用Android程序向前兼容性,规避问题,但是这样的方法并不是最优方案,有可能在后续版本中,Android甚至可能放弃兼容,直接抛出异常。说明当app尝试更新Settings.System的时候,会进行版本校验,如果targetSDK 小于等于Build.VERSION_CODES.LOLLIPOP_MR1,即低版本的apk时,给出warning,保证代码的兼容性。

2024-06-20 09:52:05 109

转载 Kotlin CompletableDeferred 入门协程

然后,在 GlobalScope 中启动了一个协程,模拟一个耗时操作,然后通过调用 deferred.complete() 方法来完成操作。获取操作结果: 你可以使用 await() 函数来等待异步操作完成并获取其结果。接下来,我们使用 runBlocking 创建一个顶层协程,并在其中使用 deferred.await() 来等待操作的完成并获取结果。在 Kotlin 中,CompletableDeferred 是一个用于异步编程的类,它提供了一种实现异步操作和等待操作结果的方式。

2024-06-19 10:19:32 52

转载 探索AOSP(Framework)中的RRO:运行时资源覆盖的奥秘

运行时资源覆盖(RRO)是一种允许开发者和设备制造商在运行时动态修改Android应用程序资源的技术。这些资源包括XML布局、图像、样式等,它们共同构成了任何Android应用程序的用户界面和外观。通过RRO,可以在不修改原始资源的情况下定制应用程序的UI组件。所有UI组件,包括上述的XML、布局、字符串、颜色、样式、主题、图像和图标(drawable),都存在于Android应用程序和框架源代码中的“res”文件夹中。这些资源都可以被RRO系统定制和覆盖。

2024-06-17 11:11:47 39

转载 Android 11 framework学习之热点 打开TetherManager

step15之后SoftApStateMachine状态机进入StartedState,进入enter,比较重要的是此时会设置一个默认600000ms(10min)的timeout超时机制,如果此时间段一直没有设备连接该AP,就会自动关闭AP。ActiveModeManager是SoftApManager的基类,实际调用到SoftApManager.start,状态机发送SoftApStateMachine.CMD_START消息。打开对应请求的功能,这里对应的应该是TETHERING_WIFI。

2024-06-17 10:11:07 151

转载 Kotlin的协程,延时、超时(7秒后超时,并中断执行的任务)

优点:写法很简单,轻量级,挂起几乎不消耗内存,速度上优于java的线程,性能损耗小,能大幅度提高并发性能,本人推荐使用协程,而不用传统的线程GlobalScope是生命周期是process级别的,即使Activity或Fragment已经被销毁,协程仍然在执行。所以需要绑定生命周期。lifecycleScope只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期viewModelScope只能在ViewModel中使用,绑定ViewModel的生命周期。

2024-06-14 11:21:55 81

转载 用Kotlin协程消灭安卓开发中的回调地狱

作为原生的安卓开发,我们苦异步编程久已,自从kotlin和协程被引入了原生安卓开发,我们终于找到了优雅的异步编程写法,再也不用眼馋Javascript的async/await了。用Kotlin协程消灭安卓开发中的回调地狱。

2024-06-12 19:44:25 55

二维码扫描ZxingDemo

一个二维码扫描例子

2016-04-06

ormlite-4.48

Android中用ormlite实现持sqlite持久化 共含三个jar包 ormlite-android-4.48.jar ormlite-core-4.48.jar ormlite-jdbc-4.48.jar

2014-11-29

jdk-6u45-linux-x64.part2

如标题示,此为linux下64位java 1.6jdk,经验可以安装运行:我的linux为64 位ubuntu: uname -a Linux kevin-virtual-machine 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

2013-07-31

jdk-6u45-linux-x64.part1

如标题示,此为linux下64位java 1.6jdk,经验可以安装运行:我的linux为64 位ubuntu: uname -a Linux kevin-virtual-machine 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

2013-07-31

空空如也

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

TA关注的人

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