- 博客(80)
- 资源 (3)
- 收藏
- 关注
原创 解决Android打包过程中出现的slf4j依赖冲突问题
解决Android打包过程中出现的slf4j依赖冲突问题背景交代:昨天同事说xxx项目Jenkins构建失败,并给我发了一个构建失败的日志文件2021-12-21T10:03:29.090Z] java.lang.RuntimeException: Duplicate class org.slf4j.ILoggerFactory found in modules lib_xxxx-0.1.xxx-xxx-SNAPSHOT-runtime.jar (com.xxxx.lib:lib_xxxx:0.1
2021-12-22 14:13:19 3438
原创 MVI是噱头还是真有用?
MVI?是噱头还是真有用?今天逛技术论坛的时候偶然发现了这个词,眼前一亮,因为之前活跃在大众面前的架构模式是MVC、MVP、MVVM,至于MVI真的是第一次看到,心里一慌,自己这么out了吗?赶紧Google一下。不看不知道,关于MVI的文章还是不少的,甚至github上有开源的帮助开发者用MVI模式构建项目的代码。并且MVI的概念在2015年的时候就被提出来,但是一些文章也是最近两年才开始写的,由此可见一项新技术或者概念从提出到走到大众面前确实需要很长的路要走。我会在文件末尾放上一些我觉得写的还不错
2021-11-09 21:20:56 2786 1
原创 AndroidRuntime java.lang.AbstractMethodError解决方案
AndroidRuntime: java.lang.AbstractMethodError解决方案背景介绍今天同事尝试编译apk的release版本,编译成功,但是运行时,却爆出这个运行时异常,导致crash。排查过程定位出错位置通过查看异常的堆栈,爆出异常的方法是一个我们引入的jar包里,而这jar包引用方法是compileOnly,而compileOnly依赖的用途编译时用于构建项目,但是运行时不需要在编译时依赖它的api,但是它API的真正实现是在运行时环境我们具体看一下这个Abs
2021-11-09 11:07:12 3071
原创 关于泛型的类型擦除
关于泛型的类型擦除什么是泛型?在探讨类型擦除之前,我们还是先了解一下,泛型的概念。泛型是为了参数化类型,定义方法时传入形参,而调用方法时使用形参,参数化类型就是由确定的类型参数化,改为不确定的类型,而在调用时使用具体类型的参数,从而实现解耦。这种参数类型可以用于类、接口、方法中,分别被称为泛型类、泛型接口和泛型方法。为什么使用泛型参考文章这里的栗子是别人写的,个人觉得挺形象的,粘贴一下试想你需要一个简单的容器类,或者说句柄类,比如要存放一个苹果的篮子,那你可以这样简单的实现:class Fr
2021-11-04 14:18:27 387
原创 优雅的获取Application Context
优雅的获取Application Context前言在android开发中,很多场景我们都会用到Context,比如注册BroadcastReceiver,获取系统service,获取资源等。但是由于Context一般与生命周期关联,错误使用容易造成内存泄漏,所以我们一般会选择使用生命周期最长的Application Context,在其他类中获取application context的方式有两种第一种方式:在application添加一个context类型的成员变量,通过Application.g
2021-07-22 20:44:13 925
原创 如何用IDE运行kotlin测试代码
如何用IDE运行kotlin测试代码文章目录如何用IDE运行kotlin测试代码前言实施新建kotlin文件新建main方法运行前言有时候我们遇到一些场景,需要验证一些代码的写法是否能够达到效果,或者查看运行结果是否符合预期,如果我们用java的时候,可以写一个java类,然后再main方法中写入测试代码,那么kotlin语言应该如何运行呢?实施新建kotlin文件新建main方法运行点击左边栏三角形按钮,选择运行Run,在控制台查看结果...
2021-07-21 11:36:32 693
原创 Git添加本地提交模板
Git添加本地提交模板很多公司对于git提交有一定的规范,如果可以设置git提交模板,将会提高这种规范性,并且减少手动敲打commit信息的无效功。接下来,咱们就开始手把手设置本地模板吧。编写模板新建一个文件,可以命名为commitTemplate(当然了,看个人喜好,这里不重要)打开之后,将你们公司要求的提交模板写进去,我把我们公司的给大家看一下[ Modify ] [ Project ] [ Module ] [ Description ] [ Refere
2021-07-17 10:57:44 832
原创 Typora+Gitee+PicGo实现markdown图片自动插入
Typora+Gitee+PicGo实现markdown图片自动插入文章目录Typora+Gitee+PicGo实现markdown图片自动插入写到前面效果展示搭建步骤下载并安装Picgo安装node.js创建gitee仓库安装gitee插件设置Typroa总结写到前面现在用markdown编写技术文章已经成为一个主流,而typora拼接它免费、实时预览等特色功能也称为mac用户的最爱.在我们编写技术文章的时候,相较于只是堆砌单纯的文字+代码,大家更喜欢图文并貌的风格.在插入图片的时候,很多时候会使
2021-07-09 21:36:31 351 1
原创 【源码学习】关于Activity的启动模式
【源码学习】关于Activity的启动模式我们都知道Activity的启动模式作为android的基础问题经常在面试中反复被提及。那么究竟这个启动模式到底是什么?什么时候会用到?怎么用?启动模式是什么?我们知道activity作为android应用的四大组件之一,也是作为用户交互界面的承载者,从一个Activity A跳转到另外一个Activity B的时候,以及从Activity B点击返回键的时候,在底层上到底发生了吗?这里我们先来了解一下几个概念:ActivityRecord TaskRecor
2021-04-02 11:08:02 140
原创 【性能优化】android应用内存优化那些事
【性能优化】android应用内存优化那些事android GC机制内存被管理的环境(例如ART或Dalvik虚拟机)会跟踪每个内存分配。一旦确定程序不再使用内存,便将其释放回堆,而无需程序员干预。在托管内存环境中回收未使用的内存的机制称为垃圾回收。垃圾回收有两个目标:在程序中查找将来无法访问的数据对象;(可达性分析算法)回收那些对象使用的资源。(垃圾回收算法)回收哪些内存?引用的分类强引用:代码中普遍存在的,只要强引用还存在,垃圾收集器就不会回收 掉被引用的对象。软引用:SoftRe
2021-03-30 22:15:04 139
原创 【性能优化】启动优化那点事
【性能优化】启动优化那点事冷启动、热启动和温启动冷启动(cold start)冷启动是指应用程序从头开始:系统进程还没有创建应用进程的前提下,开始创建应用程序的进程。自启动设备启动后或系统终止应用程序启动后首次启动应用程序时,就会发生冷启动。这种类型的启动在最小化启动时间方面提出了最大的挑战,因为与其他启动状态相比,系统和应用程序要做的工作更多。在冷启动的前期,系统执行三个任务:加载并开始运行APP启动后立即显示空白window页面用于后续页面显示创建App进程一旦系统创建了应用程序流程
2021-03-29 21:31:19 219
原创 【源码学习】关于IdleHandler
【源码学习】关于IdleHandlerIdleHandler,不知道你们是否了解,反正对于我来说比较陌生,在我的业务里好像从来没有用过,而一些面试官却会问到的知识点。真是’面试是学习的最好方式‘,既然别人问到了,那我们就来了解一下,这到底是什么怎么样的一个存在,保持好奇心。IdleHandler是什么它是一个接口它存在于MessageQueue中,被定义为发现一个线程开始进入等待消息的状态的回调接口 /** * Callback interface for discovering wh
2021-03-24 16:39:03 209
原创 [源码学习]ViewModel是什么?
[源码学习]ViewModel是什么?ViewModel是Android架构组件包Jetpack的一个组件,它也是MVVM应用架构中的核心(Model-View-ViewModel),所以我们有必要学习一下ViewModel的基本原理学习源码,我们还是老规矩,先看类结构图。你没看错,ViewModel作为一个抽象类,只有一个空方法,我们来看看这个类的介绍(Google developer官网介绍)ViewModel类旨在以生命周期感知的方式来存储和管理UI相关的数据。ViewModel允许数据
2021-03-23 17:45:29 998
原创 OkHttp源码分析自学
OkHttp源码学习过程记录本篇主要用于记录自己学习OkHttp源码的过程,如果大家看到有错误的地方,请一定指正,发布文章最怕的就是误导别人。我会按照我个人总结的步骤来一步步学习源码,可能方式上也不是最好的,也请大家多多包涵。OkHttp的优点以下来自okHttp官网说明HTTP/2允许指向同一个Host的请求共享一个socket连接池减少请求延迟GZIP压缩下载大小通过缓存请求返回结果减少重复请求使用简单,它支持同步和异步请求针对优点逐个分析HTTP/2允许指向同一个host的
2021-03-23 14:46:23 266
原创 [源码学习]ReentrantLock那些事
[源码学习]ReentrantLock那些事作为面试中肯定避免不了会被问到的多线程处理机制,ReentrantLock也是出场率很高,我们先列出几个问题,然后有针对性的从源码中找到答案ReentrantLock的实现原理ReentrantLock相较于Synchronized的优势我个人习惯看一下官方文档的说明,下面简单翻译一下具有与使用同步方法和语句访问的隐式监视器锁相同的基本行为和语义的可重入互斥锁,但具有扩展功能。这句话比较简单,不过里面的关键词也是我们经常面试的重点,例如什
2021-03-22 15:44:54 94
原创 【源码学习】线程池源码自学篇
【源码学习】线程池源码自学篇线程池作为项目中经常用到的类,也在面试中备受青睐,个人对于源码也只是读过一些,很多知识点都是一知半解,借此机会自己再温故一下。我是在边自学边写这些东西,可能语言上或者逻辑上不太完善,请大家不要介意。认识线程池线程池是什么?官网解释:线程池主要解决两个问题在需要执行大量线程的场景,减少创建每个线程带来的开销,从而提升软件性能它提供了一些方法来约束和管理执行任务集合时消耗的资源(包括线程)我们先看一下这个ThreadPoolExcutor的类图,简单有一个
2021-03-19 14:38:47 125
翻译 Android线程:你想知道的一些知识
Android线程:你所要知道的一切翻译自https://www.toptal.com/android/android-threading-all-you-need-to-know每个Android开发人员都需要在他们的应用程序中处理线程。在Android中启动应用程序时,它会创建第一个执行线程,称为“主”线程。主线程负责将事件分派到适当的用户界面小部件以及与Android UI工具包中...
2019-05-09 16:50:31 290
翻译 DexGuard 与 ProGuard区别
DexGuard 与 ProGuard区别原文链接https://www.guardsquare.com/en/blog/dexguard-vs-proguardDexGuard基于ProGuard。这就是为什么升级到DexGuard如此容易的原因。但这两种产品却提供的功能差异很大。ProGuard是Java字节码的通用优化器,而DexGuard为Android应用程序提供高级保护。在本博...
2019-04-28 14:40:26 5784
翻译 为什么要用RxJava
关于为什么要用RxJava原文链接https://guides.codepath.com/android/RxJava#handling-configuration-changes如果有侵权问题,请告知!概述RxJava官方描述为“使用可观察序列构建异步和基于item的程序的库”。但这究竟意味着什么呢?让我们来一起聊一聊这个库。编写健壮的Android应用程序的挑战之一是不断变化的输...
2019-02-26 15:02:29 949
翻译 为什么要在Android研发中使用RxJava
为什么要在Android研发 中使用RxJava【翻译】原文链接https://medium.com/@lpereira/why-should-we-use-rxjava-on-android-c9066087c56c如有侵权,请立即告知!Reactive Extensions(Rx)是一组接口和方法,它们为开发人员提供了一种快速解决问题,简单维护和易于理解的方法。RxJava提供了一...
2019-02-21 18:54:23 303
翻译 Java Lambda 表达式
Java Lambda 表达式[翻译]原文链接http://tutorials.jenkov.com/java/lambda-expressions.html#single-method-interface如有侵权,请告知。Java Lambdas和单一方法接口匹配Lambda到接口具有默认和静态方法的接口Lambda表达式与匿名接口实现Lambda类型推断Lambda...
2019-02-21 10:28:08 181
原创 关于阿里热修复框架Sophix集成
最近在做一个手表项目,由于手表平台对于应用的更新方式有限制,流程比较繁琐,所以考虑使用热更新框架来做,市面上面比较火的就是(表格1来自Tinker官网)TinkerQZoneAndFixRobust类替换yesyesnoSo替换yesnono资源替换yesyesno全平台支持yesyesyes即时生效nonoyes...
2018-10-17 13:37:05 806
原创 cocos 2dx 在android 5.1.1 出现 detected illegal retrograde motion by the server
最近在使用cocos开发小游戏的时候,出现了一个BUG现象:游戏过程中调用录音机以后,再次调用cc.SimpleAudioEngine:getInstance():playEffect 很大概率出现不能播放,android log日志如下0-12 18:18:01.724 262-262/? I/SurfaceFlinger: FPS: 5610-12 18:18:01.849 1138-1...
2018-10-15 13:38:16 962
原创 cocos module 'config' not found
原因: 在VisualStudio中创建lua project需要设置command line –workdir 当前src的目录
2018-09-12 14:10:22 482
原创 CocosCreator学习1-按钮点击
Cocos Creator小白学习-实现button点击事件 关于cocos creator 本人就是小白一个,什么都不会,只能慢慢从头开始摸索着来,自己也希望能够在写自己的学习过程中,能够给后来者一些帮助,少走一些弯路,高手勿喷,如果某些地方写错了,还请指正,互相学习为主。交代目标我们的这次目标就是点击按钮,更改button上面的文字 Test->Click me...
2018-08-22 18:08:17 3559 2
原创 关于Android java.lang.RuntimeException: java.net.UnknownHostException: services.gradle.org
问题描述:下载了一个新的工程遇到,无法下载gradle包的问题,错误日志如下Downloading https://services.gradle.org/distributions/gradle-4.1-all.zipException in thread "main" java.lang.RuntimeException: java.net.UnknownHostException...
2018-08-22 17:48:02 7139
原创 【Android面试知识点】Activity相关
Activity是Android的四大组件之一,也可以说是出镜率最高的一个类,里面的知识点可以说是非常多,也是面试官必问的,接下来我们就通过学习提问的方式,来学习源码,顺便看看可能有哪些在面试中可能问到,因为Activity的知识点太多,所以可能涵盖不全,还请见谅。Activity的生命周期 Activities在Android系统中是由一个叫做Activity 栈的来管理的,当一...
2018-03-26 13:53:44 126
原创 【Android面试知识点系列】Activity的爷爷ContextWrapper、父类ContextThemeWraper相关
在开始介绍四大组件之前,我们需要了解一些关于他们的父类的细节,这样有助于我们更好的理解四大组件。上一篇我们介绍了Context,这个抽象类涵盖了很多我们所熟知的方法,也是Android访问应用资源的基础。那么我们接下来看它的子类也是Activity的爷爷ContextWrapper又做了那些封装。ContextWrapper的主要用途? 该类是对Context的代理,代理了Cont...
2018-03-20 23:46:18 536
原创 【Python】实现自动保存Windows聚焦漂亮图片
首先代码部分是从http://blog.csdn.net/sinat_22659021/article/details/78681652 这个网址拷贝的,稍作修改。希望作者不要找我麻烦,我也不想重复造轮子,so……先交代一下背景,我昨天发现我的锁屏和我的壁纸总是固定的,每天也没有新鲜感,严重影响心情啊,虽然之前搞过一个用python自动爬取bing每日壁纸,但是图片还是怎么好看,昨天就...
2018-03-20 22:33:30 1463
原创 【Android面试知识点系列】Context相关
Context是大家比较熟悉的一个类,但是里面有好多我们不怎么熟悉的知识点,接下来就让我们通过学习提问的方式,学习Context类源码。Context是一个接口还是抽象类? 抽象类,通过源码可以知道。public abstract class Context {Context的主要用途 获取一个应用环境的相关全局信息,例如获取资源、访问classes、启动Acti...
2018-03-20 16:15:37 331
原创 【Android面试知识点系列】Message相关
Message,是一个携带有数据的对象,handler通过发送该对象,完成消息的传递,跨线程的处理等。我们通过源码来学习在有哪些潜在的知识点。msg.arg1 与 msg.arg2一般在什么场景下使用? 如果传输的数据只是简单的interger类型,这两个参数是相对于setData方法更加低成本的方法,setData开销相对更大一些相对于new Message,为什么obtain...
2018-03-19 23:59:54 208
原创 【Android面试知识点系列】MessaeQueue相关
MessageQueue也是面试中与Handler、Looper是Handler问题套餐系列之一。那么究竟它又有什么潜在的知识点呢?让我们一起从源码出发。MessageQueue通过什么方法将Message对象添加进来?在什么时候执行该操作? MessagQueue通过enqueueMessage(Message,long)方法将Message添加进来,添加的主要流程为,如果该消息...
2018-03-19 23:17:10 316
原创 【Android面试知识点系列】Handler相关
和其他面试点一样,我将 通过自己学习源码,来总结可能出现的问题点。再次鼓励的大家通过源码学习Android或者其他语言的知识,源码之下,毫无隐瞒。 Handler作为Android中重要的一个类,在面试中经常被问到,也是Android跨线程通讯的好手段。谈一谈Handler在Android中的主要用途安排Message或者Runnable对象在本线程中指定时间点执行让me...
2018-03-18 23:33:44 337 1
原创 【Android面试知识点系列】Looper相关
Looper是一个面试中经常被用来问的知识点,我这里也只是总结一下通过看Looper源码可能在面试中问到的知识点,还是推荐大家多看源码。 Looper在Handler机制中,就像是一个传送带的电动机,它驱动着传送带(MessageQueue)不断的运输货物(message),handler类似于往传送带上面放置消息的机械手臂。不知道这个比喻是否恰当。默认线程中是否存在Loope...
2018-03-17 23:17:57 300
原创 对于人才的理解
什么是人才?仔细想想,我的答案是,用心做事的人。 怎么才算用心?耐心能够做看似无聊枯燥的工作,并且没有任何抱怨。耐得住寂寞,可以平静的做这些事。细心善于发现生活和工作中的看似微不足道的事情,也许是客户的一句话,也许是一段文字。 他善于发现生活中的点点滴滴中的智慧。专心做工作的时候,心无旁骛,不会被其他庞杂事情轻易打断,这个在现在处处有微信各种 快节奏生...
2018-03-14 23:53:46 3035
翻译 一种更快的针对Java对象深拷贝的方法(翻译)
一种更快的针对Java对象深拷贝的方法(翻译) 翻译自Faster Deep Copies of Java ObjectsThe java.lang.Object root superclass defines a clone() method that will, assuming the subclass implements the java.lang.Cloneable in
2018-01-24 17:39:53 586
原创 关于java分包原则
关于java分包原则 对于软件分包是架构一个代码的基础工作,也是每个工程师需要面对的问题。究竟按照什么方式来进行分包,也是众说纷纭,我这里也只是说一下自己的分包策略,请轻拍。首先,我先说一下两个原则:横向纵向那么接下来说一下,如何为横向。横向就是按照业务划分,例如我要做一个微信,微信中有聊天对话界面、设置界面、摇一摇界面等,那么针对这些需求,我会把创建几个包,方便归纳逻
2018-01-11 21:28:20 4339
原创 Heap And Stack 堆与栈的区别
交代一下背景,最近一直在看C++的相关知识,今天刚好看到“引用”这一部分。于是好奇心驱使,我想知道它与java的引用到底有什么不同,于是开始搜索大法,java的引用更加与c++的指针更加类似,但是也不一样,当然这不是重点。然后搜索的时候,突然又想知道在内存中的存储情况,于是开始搜索……,搜索……。对于heap与stack的区别我又模糊了,于是到了今天的重点,顺便记录一下自己搜索的成果。英文好的同学
2017-08-03 22:36:53 4228
原创 Clion的激活方法
弹出注册窗口选择Activate》License Server》输入“http://xidea.online”,然后点击“Activate”完成认证即可
2017-08-02 23:55:32 8527 1
原创 Java 关于 equals与操作符==的区别
在java语言中,经常容易引起大家疑惑的一个部分就是 equals 与 ==的区别,到底他们都有哪些区别呢?我们首先来追本溯源,看看equals到底是从哪里来的?它最原本的机制是什么样子的? 在java中所有对象的都有一个父类就是Object,既然针对每个对象都可以调用equals,那么自然这个equals也是父类应该有的方法。(实在不知道这个注释怎么粘贴,凑合看吧)public boolean
2017-08-01 20:24:46 282
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人