自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 不要在ConstraintLayout的子View中使用match_parent

引以为戒。目前出现过的问题,主要都是因为recycleview间接导致的。问题1:MainActivity中使用ViewPaper2,ViewPaper2显示的Fragment中有RecycleView。MainActivity中底部依赖的控件隐藏会导致Viewpaper2的高度是正常的,Fragment显示不全(RecycleView不显示)原因:ViewPaper2的宽使...

2020-02-27 09:26:51 370

原创 关于Gson对于Kotlin默认值不支持的问题

起因:一开始我以为gson是通过调用对应参数的构造,没有对应到默认值是因为kt的data class默认没有生成重载方法,后来自己试了一下发现加不加注解都无法取到默认值。断点看了看源码才发现原因:因为gson是直接调用默认构造,然后通过反射设置属性值的。而kotlin的默认值并不是直接设置在属性上的,而是在差异个数的构造方法上所以导致了默认值无效。解决方法:如图1中所示,使用Moshi是没问题的,我只测试了注解的方法是没问题的,原因是因为注解会生成对应的adapter,内部使用的是

2020-08-13 16:05:58 4

原创 同步异步与阻塞非阻塞的区别

问题源于知乎 怎样理解阻塞非阻塞与同步异步的区别?以下乃个人见解,如有不对之处,欢迎指出讨论。概念同步异步是形容结果的通知形式。通知形式!主动/被动。阻塞和非阻塞是形容客户端在接受到结果之前的自身状态。一个是状态,一个是形式。组合毫无疑问可以进行组合。2*2=4种结果。我们最常用的两种组合:同步阻塞:网络请求的同步形式。主动获取结果,并且获取到结果前其他同线程操作不会执行。异步非阻塞:网络请求的异步形式。结果靠通知,并且发出请求后就执行其他操作去了。比较不长见的两种形式:1.同步非阻

2020-05-27 19:40:18 92

原创 小米手机第一次使用SSR提示“创建一个XXX链接”,无法点击确定

原因:有软件在屏幕上层挡住了(为啥就tm挡住了确定按钮?取消按钮可以点)在之前是因为"个性主题"。后来我更新到了MIUI12没有这个软件了,一直没找到是啥软件影响的。只能重启后马上点击,趁其他软件还在启动,马上点击确定,可以解决这个问题。...

2020-05-08 16:11:31 264

原创 Android Studio国际化多语言String文件一键翻译插件

需求之前产品也提过这方面的需求,说每次翻译都要手动一次次的复制,然后翻译再复制回来,不仅容易出错,还麻烦。找现成的之前也搜索过相关文章,但是一方面很多都是不更新了,另一方面之前也没弄过插件开发,虽然比较感兴趣,但是bug太多一直没空。今天好不容易有点时间了,就顺便把这个弄一弄。1. 百度搜一下作为cv工程师,肯定不会自己从头写的,能用现成的就用现成的。发现了一篇文章,AndroidL...

2020-04-03 20:14:58 467 4

原创 instagram、FaceBook分享

/** * 动态 * https://developers.facebook.com/docs/instagram/sharing-to-feed * 快拍 * https://developers.facebook.com/docs/instagram/sharing-to-stories */fun Activity.shareIns( path: String) {...

2020-02-27 09:37:00 217

原创 Facebook打开,跳转个人首页、动态方式

1. 启动facebook,如果已经启动,就切换到前台fun startFacebook(context: Context) { val pkgName = "com.facebook.katana" var intent=context.packageManager.getLaunchIntentForPackage(pkgName); if (intent==nu...

2020-02-27 09:34:19 340

原创 通过代理解决github项目Clone过慢的问题

host或者码云啥的都各有自己的缺点:host:目标ip变了需要多次更改,不能一次设置一直生效码云:码云本身克隆github也很慢本文主要记录通过代理的方式进行配置,如果不懂或不具备这个前提请自觉点击x退出。方案一:下载:代理方式选择全局,然后直接down方案二:clone:设置代理:git config --global http.proxy 'socks5://127...

2019-12-19 17:43:26 214 3

原创 LeetCode-5-最长回文子串

这道题其实每次看题目列表都会看到,然后还每次似懂非懂,也看了很多次解法了,但是就是看一次忘一次。今天趁着明天周末可以不用早起,准备写一两道,又看到了这道题,尝试按照记忆写一写。题目最长回文子串这里需要注意的是子串,而不是子序列,子串必须是连续的,子序列没有要求连续(516. 最长回文子序列)解法暴力解法:所谓暴力,无非就是穷举,然后判断每个子串是否是回文,然后和记录的长度做比较,...

2019-11-23 00:43:59 41

原创 google应用内支付接入说明

介绍google应用内支付主要用于海外应用的内购。主要分为一次性产品、订阅和奖励产品,本文主要介绍订阅和一次性产品,其他内容可以参考google开发文档。订阅类比国内各种产品的会员,每隔一定周期向用户收费。我负责开发的应用也主要采用这种收费模式,分为按月和按年两种付费模式。一次性购买类比游戏买皮肤这种一次性买断商品。最开始我们也使用了这种方式,后来被舍弃了,改为了按年订阅。试用期这两...

2019-11-15 23:15:31 350

原创 关于使用aspectjx出现 java.util.zip.ZipException: zip file is empty

首先在demo中是没有问题的,然后集成到正式项目中就报了这个错,反复对比了好几次配置都一样的(有种情况是集成了但是不使用也会报错没找到类xxx)。先Googlegoogle发现该项目的issues里面也有很多人遇到这个问题。https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx/issues/101h...

2019-10-23 11:52:51 711

原创 听说比KMP更牛逼的字符串匹配算法-Sunday

#废话今天之前,我只知道KMP(看猫片)算法,昨天刚看了28. 实现 strStr(),今天早上刚刚从一个KMP算法的评论里面知道了还有这个Sunday算法,作为一个程序员,我最喜欢周末了。字符串匹配算法通常包含BF、KMP、BM、Sunday。BF是最简单暴力的算法KMP是最广为人知的算法BM效率高,复杂Sunday简单且高效#正文Sunday算法的最主要特点...

2019-09-23 22:58:43 282

原创 记HashMap中的tableSizeFor(寻找最小二次幂算法)

/** * Returns a power of two size for the given target capacity. */ static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n &...

2019-09-20 21:45:18 106

原创 【算法】从1到n中1出现的个数

缘由买了两本算法方面的书,每次都是随便翻一翻,前两天睡前随便翻了下,看到这道题觉得很有意思,反复看了好几次看完全明白过来,然后今天趁周末没事在leetcode上面找到这道题自己写了写,特意记录下来。1. 解法1首先按照最自然的的思路就是从1到n求每个数字中1出现的个数,无非就是一个循环,然后通过while取模算每个数字的个位数字是否是1if(n<1) return 0int co...

2019-08-24 17:07:03 88

原创 约瑟夫环问题-基础版(数学归纳法)

问题:n个人围成一圈,从1开始报数,报到m的人死,然后后面的人接着报数。。。直到最后剩下一个人,求最后这个人的初始编号是多少可以根据游戏进程进行正向模拟,但是我觉得这种方式是最自然的思考模式,肯定不是最优算法。实际上:确实不是最优。更优的算法是根据结果进行倒推:首先为所有人编号:初始号:0 1 2 3 4 5 ...

2019-08-19 22:43:12 109

原创 关于内部类访问外部类变量必须是final的解释

并不是同部分人所说的因为生命周期的问题,gc是否回收跟是否用final修饰并没有关系。final定义的是不可修改(对象指向的地址不可被修改,地址对应对象内部属性可以修改)内部类和外部类实际上是同级的,他们在编译时会被编译成两个独立的class文件。内部类能获取到外部类变量的原因是在构造外部类的时候回通过继承的方式,将外部类以及对应的参数当做构造参数传递到内部类的实现类中,从而达到内部类...

2019-08-19 13:21:37 281

原创 使用ffmpeg拼接两端音频第二段自动跳过无法播放的问题解决方案

搞了几天,编译调试乱七八糟的问题,终于解决了两种拼接方式 ffmpeg -i concat:123.mp3|124.mp3 -acodec copy output.mp3 ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3//推荐mylist.txt:file '123.mp3'file '234.mp3'...

2019-08-12 15:22:57 441

原创 Windows下载android源码

1.安装git作为一个android开发,这步应该可以跳过吧。主要就是安装git,添加到环境变量我个人是使用的Source Tree,毕竟我懒得记命令行验证:cmd 输入git,出现git的命令提示(一大堆的东西),就知道是否安装成功了2.安装Python下载地址:https://www.python.org/downloads/目前是3.7.4记得安装完添加到环境...

2019-08-10 16:48:42 182

原创 LitePal在Android9.0上报错java.lang.Class[] java.lang.reflect.Constructor.getParameterTypes()' on a null

https://github.com/LitePalFramework/LitePal/issues/546错误信息:java.lang.Class[] java.lang.reflect.Constructor.getParameterTypes()' on a null object reference错误原因:实体如果实现了Parcelable,在某些版本就会导致,目前发现在9.0上面...

2019-06-24 14:05:32 403 3

原创 一次RxJava2导致的线上崩溃问题:The exception was not handled due to missing onError handler in the subscribe()

周末正在休(玩)息(LOL),突然产品告诉我线上崩溃率很高,还记得周五测试很忙,没怎么测产品就急着上线了。吓得我感觉看了下友盟数据,发现错误频次最高的是一个网络请求无法解析域名的异常:第一反应:国外用户无法解析我们配置后台数据的域名,但是理论上来说也应该是网络错误,而不是闪退呀。第二反应:看到错误的抛出地址是io.reactivex.internal.functions.Fun...

2019-06-24 13:11:24 5784 9

原创 关于ObjectBox Kotlin集成

1.在应用的build.gradle添加classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"2.在app的build.gradle中添加apply plugin: "kotlin-kapt"dependencies{ debugImplementation "io.objectbox:o...

2019-06-22 20:01:26 394

原创 View的绘制流程

View的事件分发机制在上一篇文章中我简单的梳理了一下View的触摸事件分发,有兴趣的可以看看,帮老弟我看看有啥不足之处,留言我改,共同进步。即使不看那篇文章相信大家也都知道View主要包含View和ViewGroup(当然,其实ViewGroup也是View的一种)。在日常开发中很多时候我们仅仅依靠系统自带的控件是无法达到设计师的要求的,这个时候我们通常都需要用到自定义控件。自定义控件一般有...

2019-01-30 23:40:18 56

原创 View的事件分发机制

新年快乐马上要过年了,这个时候很多人都回家了,过完年就到了金三银四的跳槽季了,身边也有很多朋友开始准备换工作了。而我,还没想好。View的事件分发机制在面试中被问到的频率很高,大概跟View绘制流程问到的频率差不多。我们今天就来复习一下View的事件分发机制,用‘复习’一词是因为我本人也是个小菜鸡,才毕业一年多,写东西的水平肯定比不上在座的大佬们。至于在此献丑,只是想把自己理解的东西写出来,相...

2019-01-29 23:54:29 73

原创 Fragment和Activity的选择

闲话多说为什么作家应该用 Markdown 保存自己的文稿献给写作者的 Markdown 新手指南很久之前就知道markdown写文档很好,现在也学学吧,之前是怕太多语法记不住,实际上还好,常用的就那么几个,比看 **FSC(Fucking Source Code)**简单多了。书写过程中产生了一个小疑问: 段前是否需要缩进? 我个人觉得都差不多,不知各位何解。发问相信大家平时肯定经常...

2019-01-26 22:39:39 247

原创 2018年总结与2019的计划

风雨飘摇的2018已经过去了,我却现在才来写这篇总结。2018没想到这么快2018年就过去了,先是第一家公司内部权利斗争导致很多老员工陆续离职,我也开始考虑自己的未来。从之前每天晃晃悠悠的虚度时光到后来的考虑我想要的是什么,想了想我觉得我还是喜欢写Android,可能这和我早年就喜欢鼓捣手机有很大的关系吧。于是我放弃了每天摸鱼的日子,放弃了年底的奖金,放弃了一边写后台一边写网页一边写And...

2019-01-24 21:29:55 323 1

原创 莫名卷入寒冬(一)

11.26刚过完圣诞节后的第一天上午,新版本的需求讨论会还一直没开,我看了看原型准备先把相关功能做一做先,看有没有什么问题。结果下午老板就把我和另一个同事叫进去,我以为是关于产品的问题带上了纸和笔,结果让我回去拿手机,然后说给我们微信发了一段话,让我们看看,我还以为是产品出了问题用户发来的反馈呢。。。这一看吓我一跳,大概意思就是说说好的资金一直没到,两个老板撑不住了,就地解散。短短的一段话...

2018-12-29 00:36:54 76

原创 1【大话设计模式】简单工厂模式

最近空闲时间想学习一下设计模式,之前读书的时候其实有这门课程,但是怎么说呢,上学的时候是当任务在学,感觉设计模式莫得卵用,随着工作的深入,渐渐发现设计模式的重要性,也许我们写代码不用设计模式也能运行,但是设计模式能帮助我们让代码更tm好,主要是需求一直在变,我们写代码要考虑扩展性什么的。。。说到设计模式,之前其实也学过好几次,每次都是从入门到放弃(希望这次能多看完),主要这个过程比较枯燥。...

2018-11-27 15:17:46 100

原创 【Kotlin】object(对象)与companion object(伴生对象)

object:对象一般两种用法:1.修饰对象,object A{}类似于static class A{}并把其中所有属性和方法变为静态的。object Sington { val name = "Sington"//直接通过Sington.name调用 fun printlnName() {//直接通过Sington.printlnName()调用...

2018-11-20 15:18:08 812

原创 【Kotlin】关于const val和var

问题:今天在群里摸鱼,有人说问val,终于轮到我装逼了,我马上抢答:val就是final(终于又一个问题我能回答上来了)。然后马上有人啪啪打脸:val不是final,const val才是final。这下我就不高兴了,好不容易装个逼,才高兴不到2秒钟就被人啪啪打脸。我这个水平学了好几次都是Kotlin从0到1,马上去百度了一下。。。结果:1.val=private static fin...

2018-11-19 17:52:41 700

原创 【问题】解决Retrofit中为Post请求设置统一参数

问题:Retrofit中为Post请求设置统一参数情景:使用RequestBody发送Post请求,无法添加统一参数,换成FormBody网上倒是有很多解决方案,但是FormBody一方面MediaType跟后台要求的对应不上(不确定这个对请求有没有影响),另一方面只能传String参数(如果有什么方法可以传递其他参数欢迎留言补充),跟后台的要求对不上。解决方案:1.自定义Reques...

2018-10-25 10:38:53 2417 2

原创 【问题】Android软键盘在界面退出后不自动收回

问题:在界面中有一个EditText,当获取输入焦点后会弹出软键盘,但是这时候你退出界面,软键盘并不会收回去。环境:Fragment,Activity的windowSoftInputMode="adjustPan"解决:此处不考虑对Activity的windowSoftInputMode进行修改,防止影响其他界面的正常使用。最后通过在Fragment的结束后调里面进行监听。 @...

2018-10-25 10:25:27 2855

原创 dialog中hide、dismiss、cancel方法的区别

主要我之前用的时候不知道dismiss和cancel有啥区别。。。然后今天想起来了就去查了一下,顺便记下来备忘。dismiss:大概就是删除视图,调用Onstop回调,并把mShowing置为false。 void dismissDialog() { if (mDecor == null || !mShowing) { return; ...

2018-09-07 17:31:33 4060

原创 关于HandlerThread和IntentService

HandlerThread和IntentService放在一起一方面是因为这两个东西都只有一丢丢东西,另一方面两个还有点关系。HandlerThread其实就是个Thread,然后内部给你创建了Looper和MessageQueue,然后暴露一个接口给外部,让外部能拿到内部的looper,然后创建Handler往线程里面发消息。我的感觉就是简化版的主线程,但是同样的也不适合做长时间任务...

2018-09-05 13:46:16 53

原创 Android消息机制

学习的起因的是因为看面经,学习的结果是快乐~消息机制,听着感觉很高端,实际上就是Handler、Looper、MessageQueue三人组(别问我Message去哪了)。第一步Looper.prepare()主线程在ActivityThread中调用Looper.prepareMainLooper() private static void prepare(boolean...

2018-08-24 18:01:42 51

原创 Thread和Runnable探究

说到Thread,我们通常会想到常用的实现方式,继承Thread和实现Runnable然后扔给Thread(后面发现可以实现Callable扔给Executors,补上),那么Thread和Runnable有什么关系呢?我就这么一想,然后就去看了下源码,实际上也没啥用,只是遇到不懂的我就想去看看能不能找到答案,多懂一点总是好的。Runnable是个接口,就一个run方法。Thread实...

2018-08-17 10:44:05 61

原创 布隆过滤器

昨天做算法题看到的,以前听都没听过,布隆?扛着门板的那个?哈哈。布隆过滤器常用来做大数据量的筛选工作,就是从很大的数据集合中判断一条数据是否属于该集合。如果该集合数据量够小我们一般采用数据结构把这些数据都存起来,然后来一条数据我们就去集合中查询是否有这条数据;但是当数据量达到一定程度时,比如几个G的数据量你再这样存怕是要把内存撑爆哟,这个时候就可以采用布隆过滤器,前提是这种过滤允许少量误差。...

2018-08-09 14:05:05 62

原创 HashSet是如何去重的

忘了是在哪看到这个问题的了,用过Set的人都知道Set是没有重复的集合,那么是如何保证没有重复的呢?知其然知其所以然。其实看看源码很简单 public boolean add(E e) { return map.put(e, PRESENT)==null; }map是一个HashMap的实例,Set偷偷的用了HashMap的put方法,然而HashMa...

2018-08-07 13:11:08 1545

原创 CAS和ABA问题

之前准备学习AQS,但是看了好几遍别人的讲解还是一知半解,所以暂时看点其他的。CASCAS,之前也有看到过,不过没有深入的了解,后面阅读CAS的源码的时候注意到了这个东西。CAS:就是比较(C)然后(A)设值(S)。看到很多地方都说的交换,但我感觉就是单方面设值(可能是我没理解到,希望知道的人留言解惑,谢谢)。该方法通常有三个参数:第一个参数是偏移值还是内存值来着,反正就是确定原值地址...

2018-07-26 12:46:25 402

原创 关于ThreadLocal的探究

起因ThreadLocal,第一次看到这个还以为是Thread的一个子类,经常在各种面试题中看到它的身影,就去仔细看了一下,整理成文档写下来,方便以后复习,同时也方便有需要的人查阅,如有错误之处,请指出,TKS。用途synchronized,这个单词相信大家都不会感到陌生,因为这是Java的重量级同步锁,用来解决多线程变量同步问题,但是效率并不高,因为会有阻塞等待,是典型的时间换空间算...

2018-07-19 14:10:00 84

原创 hashCode和equals方法

equals方法用来比较两个对象是否相等。hashCode和equals方法存在着以下联系:equals的返回值能推导出hashCode的值是否相等,反之无法进行推导。另外关于"equals返回true,则hashCode必须相等"这一说法是一个规定,是保证Hash相关数据结构和方法正常运行的前提,这就是为什么“重写equals方法必须重写hashCode方法”的原因,当然你也可以不重...

2018-07-18 13:46:10 109

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