写在前面
随着Android技术的不断发展和从业开发者人群剧增,现在越来越多的公司对Android开发者要求不断增高,如何从公司面试或同行竞争中脱颖而出,这就不得不要求自己不断学习或总结技术知识。本系列旨在跟同行分享平时开发学习中的一些技术及知识,文中若有不得体或不正确之处,请联系我修改。
Android 指南
曾经因为过时的无关紧要的一次性博客文章和教程中的信息而感到沮丧吗?您搜寻了多少次才发现答案仅存在于2岁的StackOverflow帖子中?我们认为必须有更好的方法。为什么社区不能一起为Android(或任何平台)的各个方面创建有用且详细的文档?我们绝对没有理由再去处理含糊不清的内容。
CI做到90%的行覆盖率,真能发现BUG吗
如何优雅的评估测试有效性?
为了全自动的进行测试有效性评估,我们做了一个变异机器人,其主要运作是:
- 往被测代码中写入一个BUG(即:变异);
- 执行测试;
- 把测试结果和无变异时的测试结果做比对,判断是否有新的用例失败;
- 重复1-3若干次,每次注入一个不同的Bug;
- 统计该系统的“测试有效性” 。
GraphQL入门有这一篇就足够了
在实际工作中往往会有这种情景出现:比如说我需要展示一个游戏名的列表,可接口却会把游戏的详细玩法,更新时间,创建者等各种各样的 (无用的) 信息都一同返回。
问了后端,原因大概如下:
原来是为了兼容PC端和移动端用同一套接口
或者在整个页面,这里需要显示游戏的标题,可是别的地方需要显示游戏玩法啊,避免多次请求我就全部返回咯
或者是因为有时候项目经理想要显示“标题+更新时间”,有时候想要点击标题展开游戏玩法等等需求,所以把游戏相关的信息都一同返回
简单说就是:
- 兼容多平台导致字段冗余
- 一个页面需要多次调用 API 聚合数据
- 需求经常改动导致接口很难为单一接口精简逻辑
Kotlin 在Android开发中那些让人舒适的地方
- 字符模板
- 空安全
- 延迟加载
- 方便易读的循环
- 强大易用的迭代器
- 默认参数
- DataClass
- 简短而强大的标准函数库
- 通吃的when(结合密封类会让代码更舒适)
- 扩展
- 简单的Bundle 快速的Parcelable
关于 BadTokenException,Toast 可能会出现这个问题
原文
解决Toast崩溃几点方法
https://www.wanandroid.com/wenda/show/9702
屏蔽连续点击的方案有哪些?
基本的判断逻辑,能想到的有三种,分别是:
1.每次计算最后点击时间与当前时间的间隔,并判断是否超过指定时长。这种方法也是最最常见的;
2.举例的ButterKnife,它原理也很简单,就是:必须要等上一次事件处理完成之后,才接受新的事件(用flag标记,事件处理期间忽略多余的事件)。
3.借助线程池的延迟执行机制:每次处理事件之前,根据一个flag来判断应不应该处理该事件,当接收了事件之后,把这个flag标记为无效。事件处理完成后,向线程池提交一个延时执行的任务,这个任务就是把flag重新标记为可用,延时的时长,就是我们指定的间隔时长。所以,在指定的间隔时长之内到达的事件,也是会被直接忽略掉的,直到延时任务被执行(flag被重新标记可以)后,才继续接收新的事件,周而复始。这也是Rxjava的throttleFirst操作符的原理。
4.最简单粗暴的方案:在BaseActivity中重写事件分发函数,判断Down事件的间隔事件(简单粗暴,代码量少,全局防重复点击,改动少,可能存在潜在问题,但是目前没遇到)
5.aop,分为注解的方式和直接定位,注解的方式用于自己定义那些地方需要拦截,直接定位onclick的方式用于全局。
6.j神的rxbinding(好像是基于rxjava操作符的)