自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(121)
  • 资源 (1)
  • 收藏
  • 关注

原创 一种全局数据变化而且是多个的通知实现

从activityA,打开activityB, activityC 或者还存在viewpager上的其他Fragment。这种情况下,当操作了某个界面的Bean数据,更新当前自己是很容易的;但是当想更新其他界面,其他activity就比较麻烦了。这个简易的框架的目的是当onResume状态下,就把当前通知的单条变化给到;在这些界面上,大家都有相同的数据Bean(name, info, isFavourite)去展示成卡片列表。在更新数据的时候,changeData.notify(bean)。

2024-07-19 18:18:21 373

原创 我“硬刚”mmkv开源库对于版本号的定义赢啦!

可以看到,他们吸取的建议了,后续版本号将定为2.0,而且长期支持1.3.7(当然只是修正bug不再上新功能),并加了回来armV7和x86的库,前情是这个帖子https://blog.csdn.net/jzlhll123/article/details/139917169。而对于我们普通程序员而言,看到gradle有黄色提醒,我们有版本升级了,而且仅仅是第三位的升级,自然就给升级上去了。然后,时间过去了2周,看着越来越多的人给他提issue,看来他们也抗不住了。于是,经过我的多方研究,所以,对于这个事情,

2024-07-08 18:24:15 202

原创 android2024 gradle8 Processor和ksp两种编译时注解实现

android的编译时注解,老生常谈,外面的例子都是bindView,脑壳看疼了,自己学习和编写下。而且现在已经进化到kotlin2.0了,google也逐渐放弃kapt,进入维护状态。所以要好好看看本贴,基于最新的gradle8.6,kotlin2.0+,介绍kapt,ksp的写法。

2024-07-05 19:50:48 1039

原创 android deep links即scheme uri跳转以及googlePlay跳转配置

android跳转scheme uri的使用和问题总结

2024-07-04 10:52:45 289 1

原创 android模糊背景的实现

简单使用就是设置一个app:blurOverlayColor即可。android上模糊后期已经通用了基本上就是RenderEffect。为了使用方便简便找到一个合适的库。

2024-07-02 09:58:13 305

原创 android iconfont带图标的图文并茂的一种实现

android使用iconfont实现图文并茂

2024-07-02 09:48:37 307

原创 UnsatisfiedLinkError libmmkv.so not found

以前我发过一个帖子https://blog.csdn.net/jzlhll123/article/details/135248574,对于更老的手机,由于很早之前mmkv就不支持很老很老的架构了。没有默认的lib armeabi目前这种机器,确实只占不到1%,我们就忽略了。而如果你是googlePlay发布的话,由于平台又做了cpu架构的区别分发,用户v7a手机下载到的真实程序就没了。从打包后的包解压可以看到,只有arm64-v8a和x64目录里面有库。而1.3.4打包解压后,是4个目录有的。

2024-06-24 10:23:15 269

原创 升级gradle8.x无法编译aar上传maven without declaring an explit or implicit dependency

提示generateMetadataFileForReleasPublication without declaring an explit or implicit dependency.以前,我们通常是通过。

2024-06-18 17:05:59 269

原创 kotlin1.8.10问题导致gson报错TypeToken type argument must not contain a type variable

原因就是字节码写了new出来的匿名内部类是个带T的,所以因为JVM上泛型擦除出现了T,gson的TypeToken就无法解析到真实的类,因此出现了问题。或者参考我上篇帖子https://blog.csdn.net/jzlhll123/article/details/139302991的三个解决方案。书接上回,https://blog.csdn.net/jzlhll123/article/details/139302991。我后来又通过在demo工程中尝试,怎么都无法复现,困扰了我好几天。

2024-06-02 23:13:34 640

原创 gson解析出现IllegalArgumentException: TypeToken type argument must not contain a type variable

让我们从头来捋一下。cmdcmd2上述代码呢,我们的目的是这样的:我们有一个实体类MyCmd, 由于cmdData的类,可变,他的真实类可能是Class1,Class2…我们想要做的事情呢,就是把MyCmd里面的基础字段,比如deviceId等进行修改。再还原回去。在gson2.10.1的库,上述代码是不会报错的。经过调试:我们可以看到,由于泛型传入的是Any(java则是Object),gson帮我们将cmdData解析成了LinkedTreeMap,这是他内部的结构。

2024-05-29 20:36:34 791 1

原创 firebase如何自定义上传日志

官方文档https://firebase.google.cn/docs/crashlytics/customize-crash-reports?就是你必须在一堆log函数调用以后,调用recordException才行。这就是firebase提供的自定义日志和excption上传的方法。但是如果你认为log函数调用后,直接就能查看到日志就错了。我们会容易忽略这句话,“将日志与您的崩溃数据相关联”。所以遍查stackoverflow得到了解释,我们在这个page是找不到日志的。

2024-05-29 14:54:49 231

转载 android WebView无法弹出键盘

然后再重新运行下,看是不是ok了。问题原因处在最后的defStyleAttr,不能设置为0,应设置为com.android.internal.R.attr.webViewStyle!具体这个styleable里的参数是什么,暂且还未找到相关代码。有找到的朋友也欢迎分享下!原文链接:https://blog.csdn.net/Aran_biubiu/article/details/108326075。检查下你的WebView是否是自定义过的。如果是的话,构造方法注意一下,如果写法如下图所示则无法弹出。

2024-05-28 17:47:08 52

原创 android Seekbar当点击的时候有一个圆圈

通过修改background为null,就能不显示了。

2024-05-28 17:45:47 336

原创 android时间textView不等距导致宽度跳来跳去自定义View解决

android时间textView显示不等距导致宽度跳来跳去的原因是,大部分字体,0~9的数字的宽度是不等距的,因此当显示时间的时候,由于组合不同,就会导致宽度不同,时间看上去就会跳来跳去。因此解决办法有2个。第一,使用monospace的字体库。第二,就是今天我要说的自定义view来解决了。

2024-05-24 09:40:34 128

原创 【大道至简】官方兼容到android13+的获取系统屏幕高度, statusbar,navBar

android在屏幕高度和app高度,statusbar, navigationbar的高度处理上,迭代了好多版本。android11, android12都有新的api和过时的api标记。涉及的api太多。现在终于找到官方支持的库。分享给大家。

2024-05-14 21:27:08 922

原创 ShapeableImageView圆角效果不对

如果没有添加scaleType centerCrop就会出现圆角不对劲的情况。后续有空,研究下为什么。

2024-05-13 10:02:36 147

转载 包了浆的android material主题默认颜色值

colorPrimary:应用的主要色调,ActionBar 默认使用该颜色,Toolbar 导航栏的底色,补充进度条比如ProgressBar或者CircularProgressIndicator。colorForeground:应用的前景色,ListView 的分割线,switch 滑动区默认使用该颜色;textColorPrimary:应用的主要文字颜色,ActionBar 的标题文字默认使用该颜色;colorBackground:应用的背景色,popMenu 的背景默认使用该颜色;

2024-05-09 10:56:03 46

原创 强烈推荐gradle统一版本管理新方式version catalogs

以前都是通过自定义config.gradle, 然后apply它,有一个弊端就是无法提示新版本可以升级。比如这个:在gradle7.0 preview了新功能,现在默认稳定了。尝试一下,超级方便迁移,巨推荐!几个好处:以前自定义,无法提示新版本;而且无法点击跳转过去;官方出品的,可以直接点击跳转,也可以在libs.versions.toml里面有提示。巨方便!

2024-05-06 12:20:13 514

原创 SharedPreferences垃圾吗?对比MMKV和DataStore经验之谈

它是腾讯出品用于日志存储的,由于是奔溃瞬间也能记录,那么也就只有mmap的特性,进程死了也能存储。那么, 大部分情况,都是比较推荐使用MMKV的。对吧,但是看了源码你就知道,如果你频繁需要用到这个函数的时候,你每次去创建内部有大量的同步锁,文件读取,创建等待。综合这些SP的问题,其实大部分是使用者给他强加了太多的压力了,他本来就是一个小巧的东西。因为它要的就是快,如果每次你写入,立刻保存它就退化成了SharedPref了。他可能会崩溃,他可能无法提供大内容的存储,性能比较差,ANR等等。

2024-04-30 18:13:18 715

原创 Gson打印按照想要的key顺序

但是,由于json内部在序列化或者反序列化的过程,key其实是hashMap,无序的。因此,得不到我们想要的打印。它是用于将对象bean,转成json以后,能够比较漂亮的打印出json的结构。我常用的是如下4个函数。当然如上一些代码,尽量使用在Debug场景。通过注册解析函数,自行构建得到顺序。默认大家都知道这个吧?

2024-04-30 10:30:49 337

原创 googlePlay丢失语言包

话不多说,googlePlay aab就是这样的规则。

2024-04-28 14:53:16 131 1

原创 BottomSheetDialogFragment大量踩坑-自适应高度和最大高度和滚动问题等等

BottomSheetDialogFragment有大量的坑,这里做了不少的记录。固定展开,含有EditText的处理,自定义Toast的显示父控件,无法在dismiss之前得到监听,自适应高度和限定最大高度,含有滚动内容的处理。

2024-04-24 15:42:15 654 2

原创 使用Barrier对齐ConstraintLayout几个控件的最高的一个

使用Barrier对齐ConstraintLayout几个控件的最高的一个。

2024-03-22 18:04:22 404

原创 android:fillViewport=“true“ 可以是NestedScrollView里面的控件充满

使用NestedScrollView的时候想要让布局撑满撑满整个屏幕,因为有一个控件需要放在屏幕底部。追加android:fillViewport="true"给nestedScrollView;关键点,嵌套一个布局wrap高度即可;然后让底部控件到底。

2024-03-22 17:18:24 542

转载 Android思源字体显示行高很大解决

安装以后,会提示你的环境C:\Users\xxx\AppData\Local\Programs\Python\Python312\Scripts。我这里安装在了C:\Users\xxx\AppData\Local\Programs\Python\。如果用别的工具,可能你需要找一个Hex工具了。搜索yMin,然后按N,应该只有一个地方。再次打开cmd,敲入ttx。百度python,安装python3.8+,目前3.12+。将你自己的目录,添加到windows的path中。直接关闭,重新vi它。

2024-03-13 20:35:18 170

原创 最新android icon和splashScreen适配兼容至2024android

android在12做了splashScreen的变动,即,android12+有自带的screenSplash过渡,不论你是否自己有变化,都会插入该动画。android8做了icon的巨大变动。13做了图标的主题兼容。

2024-03-11 17:33:03 1975 1

转载 android TextView自动换行右侧有大留白

所以,尝试使用android:breakStrategy="simple"来解决吧。

2024-03-06 10:10:07 270

原创 jsbridge2.0项目实践和踩坑记录

https://github.com/lzyzsd/JsBridge 1.0.4的版本还是挺好用的。最新的master,他并没有打包成aar公开,而且master代码已经被各种提交污染导致bug。更新的相互通知的机制。那么我基于该框架,也是为了完全兼容以前的前端H5代码,实现了jsbridge2.0。目前公司日活10w+。

2024-02-28 15:32:23 841 2

原创 Android LiveData Cannot add the same observer with different lifecycles

参考(https://blog.csdn.net/weixin_36762615/article/details/106719262?或者Activity,被回收再创建,之前的activity没有立刻finish,而新的已经onCreate。而不能通过jclasslib,或者,jadx,均不能看到这个优化。其实不论是java或者kotlin,不引用外部的函数或者变量,都会导致此问题。因此,才会导致liveData的Observer,已经绑定了。会导致这个单例被使用,而还没有来得及接触注册。

2024-02-27 18:22:46 657

原创 android键盘与布局记录

android键盘的处理布局顶起问题,一直比较棘手,通过是否是包含WebView和NestScrollView,以及adjustResize和adjustPan,或者android11版本来不同的处理方式。

2024-01-17 11:17:55 462

原创 androidStudio sync failed GradlePropertiesModel (V2)

经历了一整天的删除C:\Users\xxx.gradle, .android 和项目.idea, .gradle, 卸载重装,等等无效之后。然而,今天开机以后,无论如何,点击gradle的大象图标(Sync Project with Gradle Files),一直提示这个。这个时候,需要打开详细的日志(androidStudio中Build窗口可能会有直接点击的提示)。不负责任推测,可能是电脑重启更新后,某些目录比如这个Temp授权丢失,或者公司网管做了什么鬼更新。显然,这已经不是常规的项目配置问题了。

2024-01-04 17:17:56 1041 1

原创 couldn‘t find “libmmkv.so“ android8.1.0 Nexus 5X

研究了很久,一方面是因为mmkv团队也已经不管这个事情,从他的issue来看,每次有人提到这个,他要么就不予理睬,给出这个并非库维护者需要干的事情,要么就说你去找google。抛开那种确实是集成库的开发者的问题之后,事实99%都能用的情况后,那么,还存在于某个机型,比如我这里也遇到的android8.1.0 Nexus 5X,也会存在找不到库的情况。相当于死马当活马医,传统的代码crash了,抓住,使用relinker的方案再行load库,大不了再crash一次。后续我会继续跟踪和复现,再行修改。

2023-12-27 16:12:46 1281 4

原创 android RecyclerView1.3.2与NestedScrollingParent的变化

而且也符合我们下拉刷新的要求。因为我们不需要edge的边缘拉伸效果,而是将分发事件的多出距离用来做下拉刷新的整体布局往下拉的效果。当到了极限,则会出现边缘效果,就是有一个额外的小头部效果贴在边上。并且,RecyclerView就会出现简单的拉伸变长,以表现它无法继续滑动的现象。因此,这里多的代码,如果把dx, dy变成了0,则会进一步导致直接将原本应该分发给parent的unConsumed值给消费掉了。这篇文章,可能不懂的人将会不知所云,懂的自然懂,不懂的可能需要遇到类似问题回头来看我的帖子好了。

2023-12-26 15:33:51 565

原创 android手机莫名其妙卸载重装有残留数据

最近包括1年前,也都发现了,某一些手机(特别是,有google框架服务的)在卸载后,安装回来,会加载到类似/data/data下面的cache内容,比如database,sharedPref,mmkv等。问题的根源在于,从android6.0开始就支持一个自动备份。并且在android11,android12,均有更改。其中fullBackupContent,是配置android11以下。进行影响你配置androidManifest.xml的三个点。其中allowBackup,是老版本android必备。

2023-11-30 17:36:21 360

原创 fragment的onCreateView中设置RecyclerView adapter概率不生效

所以推测来讲,主要的原因是需要让RecyclerView走完onLayout才能确保LayoutParams能够被真实的测量和显示完成,根据onMeasure->onLayout->onDraw的顺序。而我曾经遇到过,通过LayoutInspector查看,布局已经存在,但是没有高度,即可能LayoutParams出现错误。另外,也建议使用全局的MainHandler来post,而不是调用RecyclerView自身的View的post。一般的,我们的RecyclerView是用来展示网络(后台)数据。

2023-11-01 14:39:43 188

原创 LiveData去除粘性

而我们的业务代码注册监听的函数observe(owner, observer) 或者observeForever(observer)第一,反射很少,因为mObservers在LiveData是final的全局变量,不会变化。众所周知,LiveData是粘性的。想要破除粘性,我翻阅了一些代码,写的五花八门。直到removeObserver的时候,通过mObservers.remove(observer)来移除。第二,与源代码LiveData的思想高度统一,都是通过wrap用户的observer存起来的思路。

2023-10-10 01:54:24 136

原创 android被杀以后fragments缓存重建问题和测试方法

这个问题,其实不是太好复现。因为在android的缓存Fragment机制是写在androidx的库中。

2023-09-25 16:14:28 720

原创 kotlin代码执行顺序初始化

1. 先走父类的逻辑。即先(创建父类变量&init,按照代码顺序),然后父类构造函数。2. 再走子类的逻辑。先init{} 和全局变量的初始化,然后构造函数。1. init{} 和全局变量的初始化,看谁写在前面。2. 构造函数永远最后走。

2023-09-25 11:34:33 193

原创 android Junit4编写自测用例

10多年的android开发经验,一直以来呢,也没有使用过android自带的测试代码编写。说来也惭愧。今天也花了点时间稍微研究了下。还挺简单。接下来就简单的说一下。

2023-08-24 10:01:19 663

原创 android NullPointerException externalCacheDir

android的getExternalCacheDir出现了空指针,NullPointerException的解决方案。

2023-08-22 16:41:39 576

HDThanhua_super_v0.9.2.zip

HDThanhua_super_v0.9.2.zip

2016-08-06

空空如也

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

TA关注的人

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