自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【采坑记录】kotlin compiler embeddable 下载超级慢

今天碰到一个奇怪的问题:在家里用自己的电脑更新下公司的项目,突然发现重新构建工程时一直在跑下载kotlin compiler embeddable 的task,期间打了两把王者农药还没跑完就离谱,于是尝试了如下方案。

2023-06-10 01:53:43 3721 2

原创 【Android Service】IntentService

IntentService是Service的一个子类,内部维护了一个工作线程,他会把所有的任务都放到工作线程中处理。多次开启IntentService时,每一次的开启的任务都会放到工作线程中处理,当所有的任务完成时他会自动调用stopSelf方法来结束ServiceonBind方法不会回调onStart方法内部进行了默认实现是IntentService的核心。

2023-03-16 18:21:25 566 1

原创 【Android Studio】断点调试

当我们配置了新的变体时如release、qa,必须手动开启这个功能,否则不能进行断点调试。现实很残酷,当我们选择release变体,然后去run app时 又提示没有配置签名信息,其实很好理解缺少下面这玩意。因为断点调试需要了解下这相关信息。那么问题来了,我把这里的debug 变体类型改为release不就可以直接跑release包到手机了吗?断点调试主要是掌握下断点调试的几个按钮功能,然后会对当前执行的表达式求值就基本差不多了。可想而知原来我们经常在debug下进行了断点调试,其背后还是有些东西的~

2023-02-16 17:58:26 2196

原创 Navigation#popBackStack收获

从getDestinationCountOnBackStack的方法名以及if语句的判断条件来看当前任务栈中只有一个fragment时才走这里,猜测是结束当前Activity的操作这里不深入探究。看下else内的逻辑,调用了popBackStack()方法,继续深究吧 ->这个方法也很简单,当任务栈不为空时直接调用popBackStack的两个参数重载方法,并且第一个参数我们能够看懂传递的是当前fragment目的地的id。继续深究->妹的不翻译了,解释的够清楚了。

2022-12-09 17:09:02 949

原创 Error resolving plugin Plugin request for plugin already on the classpath must not include a version

为了加深印象,了解缘由 决定浅浅探究下~ 归其原因还是对较新版gradle语法不熟悉的缘故。

2022-10-17 18:29:38 3567

原创 Android target sdk 31升级采坑

最近发布Google 内侧版本app时老是会出现一个警告⚠️ “app的target sdk 版本必须不能低于31(Android 12)” 否则今年12月之后将影响上架。于是趁着空闲便搞下target sdk的升级。期间还是踩了一点小坑的,这里就把我们项目中迁移遇到的记录下,希望大家碰到类似的能够轻松避开~

2022-10-13 16:27:06 3658

原创 Kotlin#object#get踩坑

companion object中定义了两个字段,字段的值是根据Helper.region这个变量的值动态更改的,然而在获取二者字段的值时确是不同的。可见二者的kotlin代码被编译成的java代码是不一样的,因此有无get的区别也就出来了。今天在项目中碰到了kotlin字段赋值的坑,这里简单记录下,也希望对大家也有帮助~简单分析下code值的获取,如上getCurrencyCode的逻辑也是类似了~test生成的java代码code的获取可能是写死的常量?

2022-09-19 11:43:36 573

原创 Android Button#background 在MaterialComponents主题下无效问题

方案很简单,一旦涉及自己的项目那可能有点麻烦,诸如修改为Bridge主题,app的好多UI变动了之类的,我们项目中碰到的是三方aar使用的还是Button,还好aar提供的有源码,我们吧源码给他改了兼容控件解决了(这个bug必须给sdk提,嘿嘿嘿~)Bridge中如何实现Button的主题兼容设置的,沿着这条路可以探索一番~ 看看能否自定义主题来解决这个兼容问题,让Button在我们自定义的主题下也能修改bg。(1)修改主题添加Bridge结尾的主题如下,此时Button#background属性可生效。

2022-09-09 17:02:27 1097 2

原创 Duplicate value for resource ‘android:attr/background‘ with config ‘DEFAULT‘ and product ‘‘

好吧values.xml是合并后的资源文件,找到自己自定义属性的attr.xml 让二者保持一致就行了~首先看报错信息,background属性重复定义了.

2022-09-09 14:58:36 1869

原创 Duplicate class android.support.v4.app.INotificationSideChannel found in modules core-1.8.0-runtime

看了报错信息明白了,这是类冲突了,INotificationSideChannel这个类在androidx.core:core:1.8.0与com.android.support:support-compat:26.1.0这个两个模块中都有。我androidx的项目还引入了support库?还是回顾下冲突的产生吧。还真的有 emmmm,,,,,测试下吧刚添加的依赖移除后这个support库就没了。如何解决这个问题呢?很简单,gradle.properties 添加如下即可。项目中引入了support库?..

2022-08-09 18:23:30 2767

原创 由GlideException: Failed DecodePath{DirectByteBuffer->GifDrawable->Drawable}引起的刨根问底

最近写个demo使用Glide加载图片突然发现图片未加载出来,主要报错:这时感到很奇怪检查下自己的代码,发现图片的url有问题,,,,,这个图片是自己github项目上放的一张图片,可能是受Github#ReadMe的影响,自己平时在Github#ReadMe中插入图片时直接把项目中图片链接以富文本语法插入即可展示图片。因此使用Glide加载这张图片时自己直接就使用了这个链接。说了半天说说为啥报错吧 😄😄😄😄 其实图片url有问题,这个url在服务器上代表的是一个页面资源,而不是一张具体图片资...

2022-06-25 19:22:57 591

原创 Kotlin面试复习

= = , = = = ,equals默认情况下 三者比较的都是内存地址。但是kt对equals进行了操作符重载。equals的作用等同= =,也就是说重写euqals后对象使用==比较的效果与equals比价效果一致。标准函数let// 语法(student为任意对象,任意对象都有这个let方法)student.let{ //todo code.} 方法被定义为泛型扩展函数,任意对象都有这个方法。主要用途是配合?.操作符在空指针检测时起到很大作用。由于?.操作符可以与if语句可

2022-05-24 12:18:02 212

原创 计算机网络面试:补充篇

网络分层的概念TCP/IP四层模型的网络接口层对应TCP/IP五层模型的哪两层?答:物理层数据链路路层网络层谈谈网络层?网络层又叫网际层、IP层。IP层主要是IP协议。网络层特点向上层只提供简单灵活、无连接、尽最大努力交付的数据报服务。简单灵活:每一个分组(也就是Ip数据报)独立发送, 与其前后分组无关 也即分组无序(不进行编号)无连接:网络在发送分组时不需要建立连接。尽最大努力交付:网络层不提供质量的承诺,即分组可能出错、丢失、重复、无序、当然也不保证分组交付的时限。IP地址

2022-05-20 16:53:13 352

原创 线程面试:补充篇

ReentrantLockjdk1.5开始提供了Lock接口供我们实现自定义的锁,jdk源码的ReentrantLock就是这个接口的实现类,其实现原理核心思想 cas机制+队列阻塞 + lockSupport 阻塞唤醒。原理如下,以定仅剩一间总统套房为栗子:因此我们可以基于实现思想自定义实现:/** * Create by SunnyDay on 15:41 2022/05/13 */class CustomLock implements Lock { // 类似房卡:登记线程

2022-05-13 17:33:30 86

原创 Android 面试复习

面试1#java基础篇面试2#java基础杂七杂八篇面试3-Java常见集合源码List面试4-Java常见集合源码HashMap面试5-常见集合源码LinkedHashMap &TreeMap面试6:线程面试:基础篇线程面试:中级篇

2022-05-09 21:21:00 150

原创 数据结构#哈希表

HashTabble基础啥是哈希函数?数组的查询、修改时间复杂度为O(1),若是物体的属性间存在映射关系,则可以借鉴数组的优势把“键”转化为数组的索引这就是哈希函数要做的事情。从生活中的“键”转化为索引引起的思考假如一个班级有30名学生,学号为1-30。这时可以以学号减一作为数组的索引即可顺利存储30名学生的信息,这样的从“键”转化为索引的方式还是相对简单的。不过大多数情况下我们处理的数据都比较复杂,如我们对居民的信息感兴趣,居民的唯一识别标识可能是身份证号(18位的数字)由于身份证的数字太大了超

2022-05-06 19:50:22 849

原创 面试2#java基础杂七杂八篇

面向对象特征封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。多态:多态顾名思义“一种形式多种状态”说了等于白说。其实啥叫多态呢?或许可以这样说:子类对象持有父类或者接口类型的引用,在方法调用期间动态的改变。 表现为变量编译时是一种类型,运行时是一种类型。父类的静态方法能否被子类重写不能:静态方法和属性是属于类的,调用

2022-04-26 18:07:27 80

原创 Java#异常

简介Java语言中Throwable是所有异常的根类,Throwable 派生了两个直接子类Error 和 Exception。Error 表示应用程序本身无法克服和恢复的一种严重问题,触发Error时会终止线程甚至是虚拟机。Exception 表示程序还能够克服和恢复的问题,按照处理时机可以分为编译时异常和运行时异常。编译时异常都是可以被修复的异常,代码编译期间java程序必须显式处理编译时异常,否则无法编译通过。运行时异常通常是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,但在

2022-04-21 19:10:13 410

原创 面试1#java基础篇

一、泛型1、啥叫泛型?泛型是java5新增的语法糖。这种技术可以把编译期发生的错误提到运行期,很大程度上提升编码效率。默认情况下向集合中添加的类型元素都是被当做Object类型处理,当程序从集合中取出对象后,就需要进行强制类型转换,这种强制类型转换不仅使代码臃肿,而且容易引起ClassCastExeception异常。然而这个异常在编译期是没有任何问题的,会编译通过。但是在运行期就抛出异常了。通过引入泛型这个语法,使编译期间限制添加元素的类型,避免了类型转换的出现。2、泛型的类型通配符<?&g

2022-04-18 18:57:49 210

原创 Java#注解

简介注解Annotation,可以理解为java代码的一个标签,这个标签为被标记的代码提供一些数据。java的哪些东西可以被贴上标签?包类接口方法字段变量方法参数等等Java内置的注解Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。1、三个常见的注解@Override :检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。@Deprecated :

2022-04-15 17:59:15 698 1

原创 【Github】pull request 创建

一、修改文件&提交文件1、查看改动修改文件后可以使用git status 查看本地有哪些改动2、提交修改git commit Enter键 进入提交编辑区编辑区首行为要提交的标题编辑区首行一下为内容,一般写哪些改动编辑完成 shift + 双击z 退出编辑区3、创建分支推送到远程git push origin 远程分支名: 新起名分支 (远程仓库分支:新起的名字分支。冒号中间不要有空格)4、提交后打开github项目指定pullRequest 要合并的分支即可。然后指

2022-04-15 11:40:05 1240

原创 Git#基本命令

2、修改用户名和邮箱地址3、创建代码仓库&添加文件&文件提交到本地假如本地SummaryDemog Peoject在androidWorkplace文件夹下,如何创建代码仓库呢?我们需要进入到androidWorkplace目录下然后输入如下命令即可文件添加文件提交到本地4、查看上次提交之后是否有对文件进行再次修改5、比较文件的不同,即比较文件在暂存区和工作区的差异。6、查看提交记录7、分支8、将本地的 master 分支推送到 origin 主机的 master 分支9、

2022-04-15 11:36:30 100

原创 谈谈安卓的Bitmap与Drawable

前言搞安卓有些时间了,对图片老是存在一些疑惑:给View设置背景的原理是啥?啥是Drawable呢?Bitmap又是啥呢 ?Bitmap与Drawable有啥区别呢?整天看着这些熟悉有陌生的名词,当面对这些问题时却发现自己能说出来的却很少,,,, 今天就来谈谈自己的发现。康康Drawable首先用一句话来总结下Drawable吧:Drawable是对安卓中所有可绘制图像的抽象,也就是说安卓中的图像是以Drawable形式存在的。为啥说安卓中的图像是以Drawable形式存在的?这点就要从View展

2022-02-25 17:12:38 1514 1

原创 谈谈多线程中的Future

为啥会有Future常见的开启线程方式有两种:重写Thread的run方法,调用start开启线程。给Thread传参Runnable实现类对象(需要实现run方法),调用start开启线程。但是这两种方式都有局限性,那就是run方法虽然运行在子线程中,但是我们无法得知run方法执行的结果。这时又出现了几个相关类Future、FutureTask、Callable。这几个类结合Thread就可实现获取其他线程中执行方法后的返回结果。相关简介Future相关主要有两个类FutureTask和C

2022-02-23 21:16:11 1913

原创 java.lang.reflect.InvocationTargetException (no error message) 的解决方案

背景开发中偶尔会碰到这个问题:Execution failed for task ':app:kaptDebugKotlin'.> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.InvocationTargetException (no error message)很是操蛋,有时自己直接build 文件删除 ,AS

2022-01-19 17:31:38 12309

原创 【Github】资源url的固定格式

老是碰到这种情况:在github上有个自己的project,每次提交新代码时可能需要更改readme文件添加一些图片展示,但是又苦于不知道文件在github上的路径,所以每次都是先把工程提交下得知图片在github上的链接后再回来更改下readme添加图片连接。然而经过一番探究发现图片的路径格式是有规律的。这里就记录下,方便下次使用时直接粘贴。。。。图片固定链接格式// 方式1:https://github.com/用户名/Project名/raw/分支名(默认为master)/图片文件在本地Pr

2022-01-15 14:02:34 910

原创 《Android#View》ConstraintLayout

一、简介ConstraintLayout在2016 年 Google I/O 中面世,它提供了扁平视图层次结构(无嵌套视图组)来创建复杂的大型布局。因此这个控件的出现主要是为了解决开发中复杂页面的嵌套层级问题。与 RelativeLayout 相似,其中所有的视图均根据同级视图与父布局之间的关系进行布局,但其灵活性要高于 RelativeLayout,并且更易于与 Android Studio 的布局编辑器配合使用(拖拽方式)。从 Android Studio 2.3起,创建layout文件默认为Co

2021-11-29 21:43:27 195

原创 【应用层3】Https

要点Http的缺点HTTP 主要有这些不足,如下,这些问题不仅在 HTTP 上出现,其他未加密的协议中也会存在这类问题。通信使用明文,内容可能会被窃听不验证通信方的身份,通信方有可能为伪装的无法证明报文的完整性,报文内容有可能已遭篡改1、通信使用明文,内容可能会被窃听HTTP 本身不具备加密的功能,所以无法做到对通信的请求报文、响应报文进行加密。HTTP 报文使用明文方式发送。(1)为啥需要加密呢?Http协议属于TCP/IP协议族中应用层协议,按TCP/IP 协议族的分层工作机

2021-09-27 21:44:52 212

原创 【应用层2】Http协议

Http报文报文请求方法报文状态码报文首部字段

2021-09-15 22:13:40 271

原创 【应用层1】Http简史

一、Http0.9最初的HTTP建议是以简洁为出发点设计的,Http0.9是一个十分简单的协议,简单到请求只有一行。这行请求包括GET请求方法和要请求的文档路径。没有请求首部,也没有其他元素,其设计目的就是为了获取html纯文本。Http0.9关键功能基于客户端/服务器、请求响应的方式服务器响应的是ASCII字符流设计用于传输超文本文档(HTML)服务器与客户端之间的连接在每次请求之后都会关闭二、Http1.0HTML规范和Web浏览器软件获得了快速发展,Http0.9的很多性不足

2021-09-14 21:46:39 115

原创 【计算机网络4】网络层

一、网络层提供的服务1、网络层应向运输层提供怎样的服务,即面向连接(虚电路服务)还是面向无连接(数据报服务)?传统电信网的虚电路服务,是面向连接的通信方式,是一种可靠传输的服务,互联网的先驱认为电信网这种端到端的虚电路服务对简单无差错处理能力的电话机是很合适的,但是对计算机来数并不合适。互联网设计了网络层向上层只提供简单灵活的、无连接、尽最大努力交付的数据报服务。2、网络层向上层只提供简单灵活的、无连接、尽最大努力交付的、数据报服务。如何理解呢?网络在发送分组时不需要建立连接。每一个分组

2021-08-22 21:02:44 1315

原创 【计算机网络3】数据链路层

物理层的作用正是要尽可能地屏蔽掉不同传输媒体和通信手段的差异。使物理层上面的数据链路层感觉不到这些差异,这样就可使数据链路层只需要考虑如何完成本层的协议和服务,而不必考虑网络具体的传输媒体和通信手段是什么。一、点对点信道点对点信道使用协议链路&数据链路帧数据链路层三个问题二、广播信道广播信道使用的协议局域网以太网End待续。。。。...

2021-08-20 21:48:02 1011

原创 Git#本地文件撤销

git在日常开发中是经常使用的,能够熟练使用这个工具命令还是很nice的,这里就总结下本地文件撤销相关的命令。一、git status1、本地修改文件未进行add操作->查看哪些文件改动git status通过命令提示可以发现:1:文件还未staged ,意思就是文件还未存到工作区间, 可使用add 命令把改动 添加到工作区间。2:一般修改文件还未add 文件为红色2、git add文件之后 未进行commit操作->查看哪些文件改动git status通过命令可

2021-08-14 18:13:47 805

原创 【安卓BInder底层2】对Binder的理解

一、BInder是干嘛的?binder是用来通信的,分为client端和sever端。client和sever可在同一进程,也可以不在同一进程中。client端可向sever端发起远程函数调用。sever端也可以给client端返回数据。二、binder存在的意义是什么?为啥选择它?1、一套完善的跨进程通信方式Linux提供了很多跨进程方式,在安卓的Framework层使用也有很多,这些都是根据不同的场景、用途进行合理筛选使用的。但是在这些跨进程方式在安卓端的应用层就会有很多安全问题了(如下图)

2021-08-10 21:22:46 596

原创 【安卓BInder底层1】Linux常见跨进程通信方式

Linux 中跨进程通信方式有很多种,安卓framework中主要使用到了四种。管道Socket内存共享信号一、管道1、特点a、半双工的,即单项的。管道描述符数据只能往一个方向流,要么是读,要么是写。如果需要既能读又能写,那么管道需要两个文件描述符。Linux还是很人性化的,提供了api pipe(fds),这个api可以生成一对描述符,一个用于读,一个用于写。 int result = pipe(fd) // 创建管道 fd[0] // 数组代表

2021-08-09 11:13:59 426

原创 【Android IPC】Binder浅析

一、Binder上层原理二、Binder连接池

2021-08-05 22:21:45 230

原创 View体系#View的事件分发

一、首先介绍下事件的传递规则用户在屏幕上进行一些列操作时这些事件都会被封装到MotionEvent这个类中。我们都知道view在activity的onCreate中通过setContentView最终被加载到window上的。因此事件产生后从上层来说首先交给用户交互的activity来处理,而activity把事件交给了window来处理,由于window是抽象类,PhoneWindow是其唯一实现类所以事件是由PhoneWindow来处理的,PhoneWindow把事件交付给根view DecorVi

2021-07-28 21:47:01 195

原创 View体系#屏幕的刷新机制

一、刷新机制图解1、图一2、图二3、图三4、图四五、图五二、常见问题1、丢帧一般是什么原因引起的主线程有耗时操作,耽误了view的绘制。2、安卓刷新频率60帧/秒,每隔16ms调用一次onDraw绘制一次?刷新频率是vsync信号发生的频率。不一定每次发生vsync时都去绘制的,需要应用端主动发起requestLayout。这样才会向surfaceFlinger请求接受vsync信号。当下次信号来临时才会真正绘制。3、onDraw之后屏幕会马上刷新吗?不会立即刷新,要等到下

2021-07-26 21:59:10 575

原创 View体系#View的显示原理

前言View的显示原理牵涉知识点甚多,想要明白整个流程需要储备的知识点还是很多的,如果按顺序探究过如下相关知识点,那么本篇的探究还是比较舒服点的。(1)系统启动过程(2)应用进程启动(3)根Activity启动过程这里是重点,留意下Activity生命周期都做了那些事、Context创建、Application创建。(4)四大组件Context知识体系(5)Window机制安卓系统启动完成后开始创建应用进程,然后启动应用进程的根Activity与用户进行交互。那么交互的界面到底是啥呢?其

2021-07-24 13:11:10 410

原创 安卓 Handler面试(4)拓展面试题

一、Looper 既然是不停的死循环为啥,当前UI未发生anr卡死?答:线程的死循环与安卓的ANR不是同一个概念。线程是一段可执行的代码,当代码执行完后,线程生命周期便该终止了,线程退出。对于安卓的应用主线程,我们是绝不希望会被运行一段时间,自己就退出,那么如何保证能一直存活呢?简单做法就是可执行代码是能一直执行下去的,死循环便能保证不会被退出。当然并非简单地死循环,无消息处理时线程会休眠。但这里可能又引发了另一个问题,既然是死循环又如何去处理其他任务呢?答案就是创建新的线程。Activi

2021-07-21 22:11:19 166

DiskLruCache源文件

安卓磁盘缓存(DiskLruCache)的java源文件,由于下载不方便,需要梯子于是下载过来,方便以后使用。

2019-04-17

空空如也

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

TA关注的人

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