
Android开发那些事
文章平均质量分 62
专栏会记录平时开发Android相关的技术点,解决过程以及心得体会!大家一起进步吧!
码匠菜鸟
这个作者很懒,什么都没留下…
展开
-
Kotlin lateinit
其实原因在于自定义的注解处理器是使用的Java反射获取类中的属性,(顺便说一下,Kotlin有自己的反射方式,功能会更强大,也许不会出现这个问题,但是他的耗时非常夸张,因此才改用Java反射,不知道现在Kotlin2.0中有没有得到改善…反编译之后的结果可以看到,lateinit修饰的变量是public的,而普通的则是private的,至此,报错真凶就找到了!如下图,声明两个变量,一个使用lateinit,一个不使用,同时使用自定义的注解进行注解。至于原理暂时还不清楚,有知道的可以留言讨论一下~原创 2024-09-04 15:14:48 · 307 阅读 · 0 评论 -
Kotlin MVVM协程分享(一)
并且在无参函数中添加了一个Person类型的参数(Kotlin中很多语法如协程等都会在对应的函数中添加参数来实现某些功能),通过这个对象来访问对应的非私有成员变量及函数。这就是它的闭包原则。 可以看到我们定义的Person类对象扩展函数反编译后并不是在对应的类中创建函数,而是在创建的文件类对象中创建静态方法。 Kotlin中的顶层函数其实就是将对应的函数包裹上一层类,并将函数转成对应类的静态方法,如。协程没有直接和操作系统关联,但它不是空中楼阁,它也是跑在线程中的,可以是单线程,也可以是多线程。原创 2022-12-21 10:22:35 · 462 阅读 · 1 评论 -
Android参照View源码实现长按效果
项目需要实现长按事件响应,又不想更改现有的onTouch事件逻辑去使用Gesture识别类,故此参照了View的源码实现LongClick的逻辑,自己实现了符合项目需求的长按功能。具体看View的源码:可以看到在ACTION_UP事件中移除了长按回调(这里我之前想自己通过增加逻辑判断来实现同意的效果,结果很不理想,于是再次回到源码找答案!)。其中的 attachInfo.mHandler.removeCallbacks(action); getRunQueue().removeCallback原创 2022-01-14 14:53:44 · 2645 阅读 · 0 评论 -
动画插值器源码分析
注:本文结合《Android动画分析(ValueAnimator)》一文阅读效果更佳在构建动画插值器的时候出现了数据明显的跳动,怀疑和底层源码有关系:设置一系列的动画帧值:将这些关键帧值转换成KeyframeSet对象,按照时间保存键值对:根据fraction取值,在fraction≥1时将直接去KeyframeSet的最后值,并且fraction不会保证一定会达到取值区间的两端,这个是数据跳动的根本原因!!否则就会在区间对比(会用到Interpolator插值器)并取值估值器会根据动原创 2021-12-28 12:04:42 · 1007 阅读 · 0 评论 -
Android动画分析(ValueAnimator)
动画创建先看入口函数:参数很熟悉了,具体看里面做了什么,其实也很简单,创建一个实例对象,并将参数设置到对象中。第一个参数暂时先不看,看第二个参数,**anim.setObjectValues(values)**重点是 valuesHolder.setObjectValues(values);这里把输入的参数值传给了 KeyframeSet这个类,这个类很重要!在KeyframeSet 里面,将所有的参数值保存到一个 Keyframe数组中,这个Keyframe可以类比Map,键值对保存原创 2021-12-28 12:03:20 · 3392 阅读 · 0 评论 -
ListView多线程图片回调采坑
最近发现之前项目在使用ListView加载多图片的时候,图片出现了闪烁错误的现象!不过凭着多年的开发(被坑)经验,老夫对此毫不在意,甚至露出了轻蔑的笑容!简单!加Tag就行!分分钟写完代码,大概是这样的:自信满满的跑程序,发现大部分情况下确实正常,符合自己的预期,但是还是会偶尔的出现一两次的闪烁现象。这……难道是哪里的打开方式不对?开始各种查代码,整理思路,思考出现问题的原因。就在我百思不得其解的时候,突然想起我现在修改的是回调函数的代码,调用好像是在多线程调用的(因为项目写完有些时候了)原创 2021-12-01 19:32:01 · 1858 阅读 · 0 评论 -
百度地图导航采坑——Engine init failed
最近在做百度地图相关项目,其中涉及到定位和导航两个不同业务模块的整合。其中定位是之前的,导航是最近新增加的。!!!注意:按照官方文档来是完全不够的,一定要根据Demo的实际使用来导入使用众所周知,百度地图开发平台的文档简直不忍直视,要啥啥没有,完全只能参照着Demo进行一步步排错。由于之前项目中依赖了百度定位的包,BaiduLBS_Android.jar ,这东西是最坑的!! 没有之一!! 它会根据你选择的功能不同包含不同的类,但同时官网也没有给出具体哪些类在哪些功能中是有重复出现的,这就会导致原创 2020-07-03 11:31:04 · 1704 阅读 · 0 评论 -
依赖了包含aar包的库后出现Failed to resolve库解决办法
最近在项目中发现一个问题,如果某个module中依赖了aar库,然后app依赖了这个module生成的aar包的时候,当build工程的时候,会出现failed to resolve这个错误。只要在app的build.gradle中加入下面代码就可以解决了:repositories { flatDir { dirs project(':targetsdk').file('libs') } } 上面代码中的“targetsdk“替换成module的名字原创 2020-07-03 11:28:54 · 1382 阅读 · 0 评论 -
Android有虚拟导航栏时遮挡底部UI解决
这样设置就行了。记录一下~原创 2020-07-03 11:25:45 · 1350 阅读 · 0 评论 -
Attempt to invoke method ‘ androidx.fragment.app.FragmentManager.isDestroyed()‘ on a nullpoint 问题解决
适配androidX中的问题解决原创 2020-05-14 09:24:37 · 4074 阅读 · 10 评论 -
Activity启动流程分析——基于API 29
activity启动流程整体如图所示整个过程涉及到的主要类名已经在图中标红显示了,中间还有一些没标红但同样很重要的类,这些类咱们都会通过代码逐一分析其在Activity启动中的作用。启动activity后实际上是Instrumentation对象(顺便提一句,咱们重写Activity生命周期的回调方法就是通过这个对象来调用的)来执行execStartActivity操作,如下图所示:那么这个Instrumentation对象是怎么来的呢?看源码:上面代码中的data.instrumentati原创 2020-06-03 16:32:48 · 414 阅读 · 2 评论 -
Manifest合并报错
在项目build过程中出现了manifest合并失败的错误,其中原因是依赖的项目在Manifest文件中也提供了provider,因此需要将重复属性替换掉,如下图所示:特此记录一下~原创 2020-07-03 11:18:45 · 611 阅读 · 0 评论