- 博客(121)
- 收藏
- 关注
原创 Espresso——Android自动化测试框架
谷歌2013年的时候开源了espress,谷歌的思路是,等到它足够成熟和稳定以后,将其迁移到Android SDK中,以此可见对他的重视。Google使用Espresso测试了他们自己的超过30个应用程序,包括G+、Maps和Drive。Espresso测试是非常容易实现的,由三步构成:ViewMachers:寻找用来测试的View。ViewActions:发送交互事件。ViewAsserti
2017-12-13 15:14:32 720
原创 轻松又酷炫地实现弹幕效果——手把手教学
前言更多代码,请查看我的github:https://github.com/shuaijia/JsPlayer ,喜欢的话就给个star!^_^ 也可以关注我的公众号,搜索 安卓干货营现在越来越多的视频网站或者客户端支持弹幕功能,弹幕功能似乎也成了很多人的爱好,发弹幕,看弹幕成了大家吐槽、搞笑、发表看法的一种方式。而国内弹幕的鼻祖应该就算A站和B站了。 弹幕(barrage),中文流行词语,
2017-09-30 15:11:42 8474 1
原创 SurfaceView+MediaPlayer封装之路
SurfaceView+MediaPlayer封装之路我的播放器叫做JsPlayer,喜欢的话,就给个star喽^_^https://github.com/shuaijia/JsPlayer这里我只介绍播放器封装思路,会贴出部分代码,如果大家想查看完整代码,可以去github查看,有不清楚或错误或改进的地方,可以issues 我!写在之前先上效果图:(1.5版本新增弹幕功能)为什么要用Surface
2017-09-18 16:50:18 12794 5
原创 Android项目从立项到上线——修仙之路
最近在组建项目组从0开始开发项目,从立项到上线,有一些心得,包括项目规范、结构、优化、三方等,与大家分享,一起修仙!接下来我会以自己写的两个项目为例,结合起来分析。代码已经上传github:Material Design风格项目 点击前往 喜欢就给个star^_^UI、Base、网络等封装库项目 点击前往 喜欢也给个star喽先上图来看看吧:项目采用MVP+Retrofit+RxJav
2017-09-06 09:38:52 2911 3
原创 安卓屏幕完美适配方案——独家秘笈
一、为什么要适配由于Android系统的开放性,任何用户、开发者、硬件厂商、运营商都可以对Android系统和硬件进行定制,修改成他们想要的样子。但是这种“碎片化”到达什么程度呢? 以上每一个矩形都代表一种机型,且它们屏幕尺寸、屏幕分辨率大相径庭。随着Android设备的增多,设备碎片化、品牌碎片化、系统碎片化、屏幕碎片化的程度也在不断加深。为了让我们的Android应用在各...
2017-08-28 10:06:54 18130 20
原创 2019年大厂Android面试题
t讯地图算法:非递归实现二叉树前序遍历;手写:双重检查单例类(其中volatile关键字作用)GreenDao底层实现binder用处和原理messager用处和原理Android中的内存泄露oom原因及如何定位如何降低程序崩溃率okhttp源码理解,使用拦截器的用处和好处项目中的难点组件化、插件化ExoPlayer源码图片优化,如何压缩、如何缓存b度算法:检测...
2019-04-17 15:47:01 1071
原创 Message Pool分析
引言Android中,我们在线程之间通信传递通常採用Android的消息机制,而这机制传递的正是Message。通常。我们使用Message.obtain()和Handler.obtainMessage()从Message Pool中获取Message。避免直接构造Message。那么Android会否由于Message Pool缓存的Message对象而造成OOM呢?对于这个问题,我能够...
2019-04-09 11:37:23 652
原创 编译时注解apt / kapt
注解一个注解允许你把额外的元数据关联到一个声明上。然后元数据就可以被相关的源代码工具访问,通过编译好的类文件或是在运行时,取决于这个注解是如何配置的。 --《Kotlin in Action》注解(也被成为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。 --《Thinging in Java》在Java和Kotlin中声明注解的方式...
2019-04-03 11:32:19 1366
原创 RxJava从入门到不离不弃(五)——Scheduler线程调度
在不指定线程的情况下, RxJava 遵循的是线程不变的原则,即:在哪个线程调用 subscribe(),就在哪个线程生产事件;在哪个线程生产事件,就在哪个线程消费事件。如果需要切换线程,就需要用到 Scheduler (调度器)。...
2018-10-18 14:39:06 399
原创 RxJava从入门到不离不弃(七)——groupBy
RxJava中的groupBy,是将一个Observable分拆为一些Observables集合,它们中的每一个发射原始Observable的一个 子序列,哪个数据项由哪一个Observable发射是由一个函数判定 的,这个函数给每一项指定一个Key,Key相同的数据会被同一个Observable发射。先看个示例,就明白了: ArrayList<Object> li...
2018-10-10 20:44:17 869 1
原创 Android实现异步的几种方式——从简单的加载图片说起
异步,在安卓开发中简直是再熟悉不过了。说到异步,脑海中立马浮现的就是多线程开发,Thread、Handler啥的一一涌上心头…我们知道在Android开发中不能在非UI线程中更新UI,但是,有的时候我们需要在代码中执行一些诸如访问网络、查询数据库等耗时操作,为了不阻塞UI线程,我们时常会开启一个新的线程(工作线程)来执行这些耗时操作,然后我们可能需要将查询到的数据渲染到UI组件上,那么这个时候...
2018-09-26 17:17:36 2241
原创 RxJava从入门到不离不弃(六)——do操作符
好久没有更新RxJava系列文章了,今天整理一番do系列操作符与大家分享。对于do系列操作符理解比较容易,他相当于给Observable执行周期的关键节点添加回调。当Observable执行到这个阶段的时候,这些回调就会被触发。在Rxjava do系列操作符有多个,如doOnNext,doOnSubscribe,doOnUnsubscribe,doOnCompleted,doOnError,d...
2018-09-21 10:52:05 1006
原创 Android 8.0完美适配全局dialog 悬浮窗弹出
前言最近项目targetSdkVersion升级到了26,出现很多问题趟了很多坑,其中就包括本篇的需要解决的问题:全局dialog 不显示。出现场景有时候我们需要在App中弹dialog,但是却不知道依附的是哪个Activity,这个时候通常会启动一个service来依附,显示一个全局的dialog。Android 6.0出现的悬浮窗权限为什么从6.0说起?在A...
2018-08-29 15:17:11 4257 1
原创 转向Kotlin——高阶函数与Lambda表达式
在调用高阶函数时使用Lambda表达式,可以使调用语法更加简洁,不过要想使用这种调用方式,就需要深入了解Lambda表达式的用法。高阶函数高阶函数是一种特殊的函数:它接受函数作为参数,或者返回一个函数。先看一个例子:fun shell(name: String): String { print(name) return "中国$name"}// 定义高阶函数...
2018-08-21 21:55:17 306
原创 RxJava从入门到不离不弃(四)——过滤操作符
RxJava中的过滤操作符,顾名思义,这类操作符主要用于对事件数据的筛选过滤,只返回满足我们条件的数据。我们试想一下这样的一个需求,有一个学生集合,要求将其中成绩不及格的学生过滤,返回成绩合格的学生集合,如果平时一般会怎么做呢?可能会这样实现:List&lt;Student&gt; newList = new ArrayList&lt;&gt;();for (int i = 0; i...
2018-08-21 12:05:16 317
原创 Android单元测试
Android的单元测试有两种方式:本地单元测试和设备单元测试,本地单元测试可以直接运行在本地机器上面的Java Virtual Machine(JVM)。它的特点是运行时间短,执行效率高,但是没有Android framework的支持,每个文件都可以进行单独的单元测试。而在Android设备上的单元测试,运行的是一个单独的APK,直接运行到虚拟机或者物理Android设备上,这种单元测试拥...
2018-08-14 10:01:44 235
原创 转向Kotlin——对象
由于Kotlin中没有静态成员的概念,因此Kotlin推出了一个有趣的语法糖:对象。那么对象能取代静态类成员吗?该怎么做呢?下面会详细介绍到。对象表达式在Java中又匿名类的概念,也就是说,在创建类的时候,无需指定类的名字。匿名类一般用于方法参数。基本理念就是方法需要接收一个类或者接口的实例,而这个实例只是在该方法中使用,没有必要单独再定义一个类,或者创建一个对象变量。因此,就在传入方法参...
2018-08-04 18:00:54 232
原创 RxJava从入门到不离不弃(三)——转换操作符
前面两篇文章中我们介绍了RxJava的一些基本概念和RxJava最简单的用法。从这一篇开始,我们开始聊聊RxJava中的操作符Operators。RxJava中的操作符主要分成了三类:转换类操作符(map flatMap concatMap flatMapIterable switchMap scan groupBy …);过滤类操作符(fileter take takeLast ta...
2018-07-15 12:20:12 344
原创 RxJava从入门到不离不弃(二)——简化代码
上篇文章《RxJava从入门到不离不弃(一)——基本概念和使用》,介绍了RxJava的概念和优点,也详细介绍了Observer、Observable和Subscriber等常见概念,相信大家对RxJava已经有了基本的认识。上篇文章中的示例大家可能会觉得,打印字符串需要那么麻烦嘛?主要是为了展示RxJava的原理而采用了这种比较啰嗦的写法,RxJava其实提供了很多便捷的函数来帮助我们减少代码...
2018-07-11 12:03:30 338
原创 ViewAnimationUtils实现过渡动画
随着material design设计规范的普及,material design中的动画将为用户提供操作反馈并在用户与您的应用进行互动时提供视觉连续性。 material design将为按钮与操作行为转换提供一些默认动画,而 Android 5.0(API 级别 21)及更高版本可让您定制这些动画,同时也可创建新动画。今天我们就来了解一下循环揭露这一效果,以及它的一些扩展的使用。先认识我...
2018-07-09 16:20:14 967
原创 RxJava从入门到不离不弃(一)——基本概念和使用
很久之前就想写篇文章,将RxJava的基本使用、各操作符和原理整理出来,分享给大家。断断续续地,看了许多大佬文章,结合自己的经验和想法,终于把它整理了出来,欢迎各位大佬拍砖。前言RxJava的编程思想已经在Android开发者中变得越来越流行。有个不好的点就是上手不太容易,尤其是大部分人之前都是使用命令式编程语言。首先要先理清这么一个问题:Rxjava和我们平时写的程序有什么不同。如果...
2018-07-04 16:31:42 409
原创 数据结构系列全集
数据结构是互相之间存在一种或多种特定关系的数据元素的集合,数据结构不止研究数据元素,还研究它们之间的关系。从去年到现在,隔三差五,一共整理了14篇数据结构文章,但水平有限,文章中可能有不足或者不对的地方,希望大家直接评论提出,也欢迎拍砖。数据结构学习笔记——总述数据结构学习笔记——算法数据结构学习笔记——线性表(上)数据结构学习笔记——线性表(中)数据结构学习笔记——线性表(下)...
2018-07-02 18:54:33 820
原创 数据结构——图相关基本概念
在线性表中,数据元素之间是被串联起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中的多个元素相关,但只能和上一层中的一个元素相关。可是现实生活中,好多关系不再是一对一或一对多,比如人和人之间的关系,会互相认识,就要考虑多对多的情况。这就是今天要介绍的——图。图是一种较线性表和树更加复杂的数据结...
2018-06-22 14:47:51 542
原创 数据结构——树、森林与二叉树的转换
在介绍树的存储结构时,就说到了树的孩子兄弟表示法可以将一棵树用二叉链表进行存储,所以借助二叉链表,树和二叉树可以互相转换。从物理结构上来看,它们的二叉链表也是相同的,只是介绍不太一样而已。因此,只要我们设定一定的规则,用二叉树来表示树,甚至表示森林都是可以的,森林和二叉树也可以互相进行转换。树转换为二叉树将树转换为二叉树的步骤如下:加线:在所有的兄弟结点之间加一条连线;去线:对树中...
2018-06-21 14:31:31 5596
原创 数据结构——二叉树的存储结构
之前已经谈过了树的存储结构,并且说到顺序存储对树这一种一对多的关系的结构实现起来比较困难。但是二叉树是一种特殊的树,由于它的特殊性,使得用顺序存储结构也可以实现。二叉树的顺序存储结构二叉树的顺序存储结构就是用一维数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标,要能体现结点之间的逻辑关系,如双亲与孩子的关系,左右兄弟的关系等。先来看完全二叉树的顺序存储,一棵完全二叉树如图所...
2018-06-21 10:28:17 2303
原创 数据结构——遍历二叉树
二叉树遍历原理二叉树的遍历:是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次。这里有两个关键词:访问和次序。访问其实是要根据实际的需要来确定具体做什么,比如对每个结点进行相关计算,输出打印等。它算作是一个抽象操作。二叉树的遍历次序不同于线性结构,最多也就是从头到尾、循环和双向等简单的遍历方式。树的结点之间不存在唯一的前驱和后继关系,在访...
2018-06-20 16:39:06 611
原创 一个不错的开源项目推荐给大家
从年初开始,断断续续。年初计划和朋友一起,利用周末和闲暇时间开发一个完整的项目,权当练手。全部使用最新控件、开发框架和设计思路。从决定开始到现在已经快四个月了,中间由于生活上和工作上的各种事情,中间断了很长时间,总算是基本完成了。内容来自某大神抓的头条数据,由于间隔时间太长,开始的时候接口还ok,现在已经报404了,还好视频模块的接口还可以用。项目已经提交到github,githu...
2018-06-08 18:58:46 3763
原创 福利啊,精品资源大放送
为了感谢大家一直以来对Android机动车的支持,今天特将自己积累和整理多年的各编程语言和好用的工具分享给大家,其中不乏相关最新的pdf版教材、知名培训机构教学视频、程序源码等等。最最关键的是,全部免费,这些资源大多是自己购买或收藏大牛的分享,绝对值得收藏一波。有的资料,您可能现在还用不到,不过,谁能保证以后用不到呢?以下所有福利,您只需关注Android机动车公众号,在公众号中回复对应内...
2018-06-04 09:50:24 259990 1
原创 转向Kotlin——泛型
无论是Java还是Kotlin,泛型都是一个非常重要的概念,简单的泛型应用很容易理解,不过也有理解起来麻烦的时候。泛型基础在了解Kotlin的泛型之前,先来看看Java中的泛型:举个栗子:在JDK中,有一类列表对象,这些对象对应的类都实现了List接口。List中可以保存任何对象:List list=new ArrayList();list.add(55);list.add(&quot;...
2018-05-16 19:35:00 1820
原创 盘点程序员离不开的十个开发神器,免费送
作为资深的程序员,虽不如市面上传的那样,背心拖鞋大裤衩、脑袋不洗牙不刷,但也是基本加班到深夜,眼圈黑黑的。为了快速编写出高质量的代码,不再忍受加班之苦,开发神器当然是免不了的,今天给大家分享几个开发神器,助你告别痛苦。下面所有的工具,全部免费,您只需要关注我的微信公众号——Android机动车,回复对应内容,即可获得免费下载地址。Notepad++Notepad++,能够支...
2018-05-16 18:46:35 4253 3
原创 腾讯技术岗内推,了解一下!
属于你们的福利来了!!!货真价实的腾讯技术岗内推!!!您需要关注我的微信公众号—— Android机动车 ,回复 腾讯内推 ,获取联系方式。要注意的是,您如果认为您真的符合招聘需求并近期打算跳槽再进行联系和投递,非诚勿扰。您还可以持续关注Android机动车,我们会经常不定时的发布大厂内推机会,还有大量编程教学视频,干货文章等你来拿!腾讯视频Android开发(北京or深圳)...
2018-05-14 10:03:47 2958
原创 转向Kotlin——数据类和封闭类
数据类和封闭类是Kotlin中的两种特殊的类,今天一起了解一下。更多精彩内容也可以关注我的微信公众号——Android机动车数据类数据类是Kotlin的一个语法糖。Kotlin编译器会自动为数据类生成一些成员函数,以提高开发效率。数据类的使用无论是Java服务器开发还是Android开发,实体类自然是特别熟悉,它就是将Json格式转化为一个只包含数据和基本操作方法的实体类,...
2018-05-03 20:07:20 426
原创 福利来袭,海量编程资料等你拿
为了感谢大家一直以来对Android机动车的支持,今天特将自己积累和整理多年的各编程语言和好用的工具分享给大家,其中不乏相关最新的pdf版教材、知名培训机构教学视频、程序源码等等。最最关键的是,全部免费,这些资源大多是自己购买或收藏大牛的分享,绝对值得收藏一波。有的资料,您可能现在还用不到,不过,谁能保证以后用不到呢?以下所有福利,您只需关注Android机动车公众号,在公众号中回复对应内...
2018-05-02 19:42:45 219
原创 数据结构笔记——二叉树的定义和性质
在一些电视节目中,会猜测商品价格,有的人是一点一点的数字累加,这样的策略效率太低了。其实有一种经典的折半查找算法,就类似于我们今天要说的二叉树。二叉树定义二叉树:是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。如下图就是一个二叉树:二叉树特点二叉树的特点有:...
2018-05-01 18:19:39 1172
原创 转向Kotlin——枚举类和扩展
枚举类Kotlin中的枚举类和Java中的枚举类型非常相似,具有类的特性。一般将可枚举的同类型的一组值作为枚举类定义。基本用法Kotlin中,枚举类型以类的形式存在,因此叫做枚举类,如下是实例:enum class Color { RED, GREEN, BLUE}Kotlin中一切都是对象,因此,每一个枚举类型也是对象,多个枚举类型之间用 , 隔开。先看...
2018-04-24 22:45:05 1366
原创 大厂的Android面试题整理
话不多说,直接上干货。某知名在线教育公司介绍一下自己项目中MVP如何实现;自定义View流程;说说项目中遇到的性能优化、内存泄漏和内存溢出;native和h5交互怎么做;事件分发流程;http、https的区别,post、get区别;算法:两个单链表相交,求相交结点;算法:获取单链表倒数第k个元素;著名安全类公司Activity的启动模式和应用场景;H...
2018-04-17 18:51:42 483
原创 数据结构笔记——树的基本概念
树的定义之前一直介绍的是一对一的线性结构,可现实中还有多一对多的情况需要处理,这就是今天要介绍的一对多的数据结构——树。树(Tree):是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:有且仅有一个特定的称为根(Root)的结点;当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、···、Tm,其中每一个集合本身又是一颗树,并且...
2018-04-15 21:21:56 902
原创 转向Kotlin——类和接口
类的声明和Java没有什么两样,Kotlin中,类的声明也使用class关键字,如果只是声明一个空类,Kotlin和Java没有任何区别,不过定义类的其他成员,区别就很大了。class MyClass{}类的构造器构造器也叫构造方法,是类创建的必要元素。1、主构造器面向对象语言在定义类的时候,都需要至少制定一个构造方法,如果不指定构造器,编译器会默认生成一个不...
2018-04-10 12:04:32 213
原创 数据结构笔记——串
枯眼望遥山隔水, 往来曾见几心知? 壶空怕酌一杯酒, 笔下难成和韵诗。 途路阻人离别久, 讯音无雁寄回迟。 孤灯夜守长寥寂, 夫忆妻兮父忆儿。这是宋代的李昱写的一首想念妻子和儿子的诗句,突然发现,这首诗竟然可以倒过来读。。。这种诗叫做回文诗。在英语单词中也有神奇的地方:“即使是lover中也有个over,即使是friend也有个end,即使believe中也有个lie。”你会...
2018-04-05 16:24:20 687 1
原创 转向Kotlin——基础知识
Kotlin基本语法对于一种语言来说,变量和函数(方法)是最重要的两类语法。由于Kotlin语法糖的存在,让本不支持函数语法的JVM支持将函数放到代码的最顶层。本篇文章主要是介绍变量的定义和函数的基本使用方法。1、定义变量绝大多数编程语言都有变量和常量的概念,Kotlin和Java类似,尽管没有常量语法,但可以使用final定义一个不可修改的变量,其实就相当于常量。在Java中...
2018-03-31 19:06:38 260
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人