自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xingfeng_coder的博客

学如逆水行舟,不进则退

  • 博客(121)
  • 资源 (3)
  • 收藏
  • 关注

原创 Kotlin中的可空类型

Java的NullPointException是经常遇到的异常,也是最让人头疼的一个异常。Kotlin为了解决这个问题,引进了可空类型,将运行时可能发生异常提前到编译期发现。Kotlin中有可空类型,这种类型表示取值可能为空;而一般类型,则取值不能为空。区别是类型后面有一个?,表示这个类型是可空的。举个栗子:var s?=nullvar s="Hello World"var s1=nul...

2019-01-03 19:51:09 1081

原创 开发者的Mac工具集

初入职场,开发工具也从实验室的台式机变成了Mac,系统也是抛弃了Windows。最初的一周都在熟悉Mac,半年下来,也是积累了不少优秀的工具。效率iTerm+on-my-zsh+auto-suggestion:第一天,学长推荐的,替代原生命令行Aflerd:替代mac原生搜索滴答清单:需求多了,记性就不好了,记下每天的任务Cheetsheet:快速查看某个软件支持的快捷键有道云笔记:...

2018-12-29 15:12:54 1093

原创 EditText在RecyclerView中的解决方案

有时候,一个列表中的Item会有EditText的出现,而由于View复用机制,如果不好好处理EditText,将会出现一些问题。之前做项目中也遇到了这个问题,通过摸索以及思考,最终得到了解决方案。其实有些问题的出现,还是由于没有理解RecyclerView的复用机制和EditText,主要原因还是菜,哈哈。菜是原罪EditText在RecyclerView中的问题例子是这样的,每个Ite...

2018-12-16 15:14:43 5528 2

原创 使用动画隐藏或显示View

一般来说,当内容更换时,有动画的话会更好过渡,用户也会体验较好。有三种比较常见的动画用于隐藏或显示内容:Circle Reveal动画、淡入淡出效果、卡片翻转效果。下面将分别介绍这三种常见的动画效果:淡入淡出动画淡入淡出动画一般是一个View在渐渐消失,另一个View同时在渐渐出现。先看效果,如下图:可以看到效果是一个文本渐渐出现,loading渐渐消失。创建xml布局<Fr...

2018-12-10 10:08:14 3066

原创 AppBarLayout学习

AppBarLayout是一个垂直的LinearLayout,实现了很多和协调布局一起合作的滚动属性。其子View可以通过setScrollFlags()或在xml布局中通过app:layout_scrollFlags属性设置想要的滚动行为。AppBarLayout很多行为依赖于CoordinatorLayout。如果你使用别的ViewGroup装AppBarLyout,很多功能就没有了。Ap...

2018-12-03 09:50:15 2096

原创 Android中具有动画效果的图片资源

在一些场景下,图片需要具有动画效果。当你想显示一个由多张图片组成的loading动画,或者一个图标切换过程,就需要到具有动画效果的图片了。Android提供了几种方式实现动画图片。下面的是个示例:第一种方式是使用Animation Drawable,这是通过建立多张静态图片构成动画的方式,类似动画片和gif。第二种方式是使用Animated Vector Drawable,然后改变其属性。...

2018-11-25 17:42:35 2888

原创 TabLayout使用指南

TabLayout是开发中经常使用到的控件,经常与ViewPager一起配合使用,一组tab,可以点击、可以滚动。这不,我们的app中也是用到了这个控件,之前对这个控件只停留在最基本的用法,因此开发时也去查了些资料,趁着周末,就系统地再学习一下。基本操作使用之前,首先需要在gradle文件中加入design库, implementation 'com.android.support:d...

2018-11-17 14:28:48 2503

原创 ConstraintLayout使用说明

刚学Android那会,Android是有五大布局的:FrameLayout、LinearLayout、RelativeLayout、AbsouteLayout、TableLayout。现在为止,Android的布局家族得到了扩充,现在在公司做项目使用的最多的是ConstraintLayout,之前接触的比较少,因此趁着周末时间,好好学习了一下,功能非常nb,不愧是Android Studio默认...

2018-11-03 16:06:18 1837

原创 自定义Material点击效果的View

最近在做项目的时候,遇到一个需求,需要自定义一个View;写到布局文件里面,希望也有Material的波纹点击效果,需要怎么弄呢??attr/selectableItemBackground将该View的background属性设为标题的样式即可,这样在5.0以上就有了波纹效果,在5.0以上就是selector的效果。这样设置了后,就有了系统默认的效果。实验其实,现在写个Button,默...

2018-09-24 09:01:11 778

原创 APK重命名插件

Android打包流程的结果是一个apk文件,而apk的命名默认使用的是(module-name)+(build-varints)+(build-type).apk,是不是经常能见到app-debug.apk,这是因为使用AS新建一个项目时,默认module名是app,然后直接使用as的run工具,其实执行的assembleDebug命令再加安装。这就是app-debug.apk的由来。 本文将...

2018-09-06 21:55:07 4590 1

原创 开发Gradle插件并上传至本地maven库流程

作为一个Android开发者,知道gradle是用来构建Android项目的,一开始在学校的时候,没怎么关注并使用过gradle,现在工作发现gradle配置、插件等等,是一个很强大的工具。因此就开始了学习之路,这边介绍一下如何使用idea开发一个Gradle插件并将其上传至本地maven库,这样本地就可以使用这个插件了。 Gradle插件是什么我们初创一个Android项目,其中每...

2018-08-12 10:50:25 3374

原创 EventBus源码分析之线程分发

EventBus的线程分发中介绍了EventBus中发布和订阅方法设置了ThreadMode之间的关系,最终表格如下: 发布线程 Android主线程 非Android主线程,线程a POSTING Android主线程 非Android线程,线程a MAIN Android主线程,阻塞主线程的发布 进入主线程的队列 MAIN_ORDE...

2018-08-02 19:03:05 437

原创 EventBus源码分析之订阅-发布模型

EventBus事件总线模式如下图: 本文主要从两个方面介绍源码: 1. 订阅者是如何注册到事件中心的; 2. 发布者发布了事件之后,事件中心是如何将事件调用到合适的订阅方法的。 订阅者注册到事件中心订阅者注册到事件中心需要调用如下代码: EventBus.gtetDefault().register(this)订阅者可以是任何对象,唯一的要求是内部有@Subs...

2018-07-26 20:00:38 652

原创 EventBus配置、粘性事件、优先级和取消事件分发

EventBus配置前面的博客中获取EventBus,都是使用EventBus.getDefault(),而如果需要对EventBus进行配置,那么需要使用EventBus.Builder进行设置。 EventBus eventBus = EventBus.builder() .logNoSubscriberMessages(false) .sendNoSubscri...

2018-07-23 19:42:43 5604 1

原创 EventBus的线程分发

EventBus支持线程分发,在上一篇博客EventBus简介以及初步使用中,了解到EventBus的使用主要涉及事件发送者,以及事件订阅者;对于发送和订阅这两个行为,可以在不同的线程中,这就是EventBus的线程分发。关于线程的设置,可以在订阅方法中使用@Subscribe注解进行线程的调节,如代码所示: @Subscribe(threadMode = ThreadMode.MAIN...

2018-07-10 21:04:25 1523

原创 EventBus简介以及初步使用

EventBus简介EventBus是一个Android和Java的发布/订阅事件总线模型,其模型图如下所示: EventBus的优点有: 1. 简化组件之间的通信 2. 简化代码 3. 快速,小巧(~50K jar) 4. 具有线程分发、订阅优先级等高级特性 从模型图中可以看到几个概念: 1. Publisher:发布者,发布事件,事件的产生者 2. Event:事件...

2018-07-09 19:59:28 359

原创 非科班生的Android秋招求职经历

拼多多 学霸提前批Android研发工程师 offer笔试基于给定接口实现ImageLoader框架一面自我介绍 静态变量和实例变量的区别 重写equals()方法的注意事项;两个list是怎么判断是否相等的? HashTable和HashMap的区别;是否允许键为null 数据同步的方法;synchronized可以在对象上加锁吗?在方法上加锁是加在哪个对象上? 进程间读写文

2017-10-20 10:18:47 3540 4

原创 Java的finally关键字

一般用于释放资源,比如IO流。 finally用来做什么对于没有垃圾回收和析构函数自动调用机制的语言来说,finally非常重要。它能使程序员保证:无论try块里发生了什么,内存总能得到释放。 当要把除内存之外的资源恢复到它们的初始状态时,就要用到finally子句。 在异常没有被当前的异常处理程序捕获的情况下,异常处理机制也会跳到更高一层的异常处理程序之前,执行finally子句: pub

2017-10-11 10:57:04 801

原创 CopyOnWriteArrayList源码分析

概述Java自1.5后提供了两个写时复制的容器,分别是CopyOnWriteArrayList和CopyOnWriteArraySet。其思路就是在执行会改变底层数据的结构时,首先加锁,然后复制得到一个新的数据,在这个数据上做修改,最后再将原来的数据引用指向这个新的数据,最后释放锁;而读操作则不需要修改。这是一种读写分离的思想,读和写不同的容器,读的是旧容器,写的是新容器。 由于CopyOnWri

2017-09-27 14:57:32 639

原创 生命游戏Java实现

关于生命游戏之前在学校看到ThoughtWorks举办的线下结对编程的比赛一等奖是大疆无人机,冲着无人机就拉着实验室小伙伴马总一起报了个名。然后题目就是实现一个界面版的生命游戏,所以才了解了生命游戏。 关于生命游戏,可以参考维基百科。 下图是效果图: 规则生命游戏中,对于任意细胞,规则如下: 每个细胞有两种状态-存活或死亡,每个细胞与以自身为中心的周围八格细胞产生互动。(如图,黑色为存活

2017-09-19 14:46:25 12588 2

原创 Android UI测试之Espresso使用

暑假实习的单位,被分到了一个测试组,因为我是搞android开发的,所以被分到了自动化测试小组,所以了解了一些UI自动化测试。主要就是看了下官方文档关于UI自动haul测试的介绍以及一些框架,比如Appium。这篇博客主要讲解官方推荐的方案——Espresso。 为什么需要UI自动化测试?我有一个观点,对于重复的工作,那么程序都是可以代替的,我想这是作为一个程序员的一个基本素养(能偷懒的绝不干活)

2017-09-12 10:08:13 3545

原创 2017春招实习-Android开发面经-bat,td等公司

远景能源 Android开发一面RxAndroid的好处 举一个RxAndroid好处的使用场景MVP模式与MVC模式 MVC模式与MVP模式的区别项目中是如何划分M、V、PV与P的对应关系是怎么样的ListView在MVP的使用,如何分配M、V、P层 项目分工 Git使用 分支的创建Service 如何创建一个Service?bindService的生命周期一

2017-09-07 17:18:40 4387

原创 TreeMap源码分析

TreeMap是NavbagableMap的实现,底层基于红黑树。这个Map按照Comparable将键值排序,或者按照在创建Map时提供的Compartor。 TreeMap的类继承关系图如下: TreeMap与HashMap的一个重要区别是:TreeMap不支持键Comparable与ComparatorComparable接口用于自身与另外一个对象比较,其接口定义如下: public

2017-09-04 09:06:21 776

原创 深入理解Callable

概述Callable和Runnbale一样代表着任务,区别在于Callable有返回值并且可以抛出异常。其使用如下: public class CallableDemo { static class SumTask implements Callable<Long> { @Override public Long call() throws Exception

2017-08-22 18:34:42 27420 1

原创 Kotlin——数据类和密封类

数据类有些类只是用来持有数据的。在这样的类中,一些标准的函数通常是从数据中推导出来的。在Kotlin中,这些类成为数据类并且以data作为标记: data class User(val name: String, val age: Int)编译器自动从主构造器中的属性导入下面这些成员函数: - equals()/hashCode() - toString()(形式为User(name=John

2017-08-17 18:41:04 2205

原创 Kotlin——抽象类和接口

抽象类一个类和它的一些成员可以声明为abstract。类中抽象的成员没有实现。需要注意的是,我们不需要用open显式注解抽象类或函数。 我们可以用一个非抽象的open函数覆写一个抽象的函数。 open class Base { open fun f() { }}abstract class Derived : Base() { override abstract fun

2017-08-07 18:56:01 1901 1

原创 JDK1.7ConcurrentHashMap源码分析

机制:分段加锁 SegmentSegment的定义如下: /** * Segments are specialized versions of hash tables. This * subclasses from ReentrantLock opportunistically, just to * simplify some locking and avoid

2017-07-31 18:29:07 795 1

原创 Hashtable源码分析

Hashtable和HashMap一样,都是一个哈希表,不允许键和值为null,该类是一个线程安全的,每个方法都加了synchronized关键字。下面是该类的继承关系图: 从上图可以看到,Hashtable继承自Dictionary类,而HashMap继承自AbstractMap,所以这两个类的祖宗就是不一样的。这篇文章主要介绍Hashtable和HashMap的异同点。 对于HashM

2017-07-26 20:56:45 1798 1

原创 Kotlin——继承

Kotlin中所有的类都有一个公有的超类:Any,这是所有没有声明超类的类的默认父类。 class Example //隐式继承自AnyAny!=java.lang.Object。尤其,除了equals()、hashCode()和toString()三个方法外,没有任何成员。 为了显式地声明超类,语法如下: open class Base(p:Int) class Derived(p:I

2017-07-26 20:48:15 782

原创 Kotlin流程控制

if表达式、when表达式、for循环和while循环在Kotlin基本语法中,已经介绍了if表达式、when表达式、for循环和while循环,可以到该博客中查看。 Break和Continue在循环中的使用Kotlin也是支持break和continue关键字的。 返回和跳转Kotlin有三种跳转表达式: - return。默认跳出最近的一个封闭函数或匿名函数 - break。结束最靠近

2017-07-16 17:28:08 627

原创 Kotlin数据类型

在Kotlin中,一切都是一个对象,可以在任何变量上调用成员函数和属性。一些类型是内置的,因为它们的实现被优化,但是它们看起来像普通类。本篇博客将介绍Kotlin的四种基本类型:数字、字符、布尔型和数组。 数字类型Kotlin处理数值型类型和Java类似,但不完全一样。例如,数字没有隐含的扩展转换,在某些情况下,字面量稍有不同。 Kotlin提供了以下六种内置的数值类型: 类型 长

2017-07-10 20:29:06 2546

原创 Kotlin基本语法

Kotlin语法简洁,主要的几种区别或重点如下: - 不用分号结尾 - 没有new关键字 - “:”很重要 - 参数名在前,类型在后 - …包的定义包的指定需要位于源文件的最顶部。(和Java相同)示例如下: package com.xingfeng_coder.basic.syntas/** * Created by Xingfeng on 2017-06-12. */函数的定义

2017-07-04 10:42:00 2334

原创 LinkedHashMap源码分析

LinkedHashMap是使用HashMap+LinkedList来实现Map接口。和HashMap的区别在于它维持一个双端链表保存所插入访问的节点。链表定义了迭代顺序,默认情况下顺序就是键值插入到Map的顺序(插入顺序)。 构造方法为LinkedHashMap(int,float,boolean)的可用来创建一个按照访问顺序迭代的LinkedHashMap,按照最少访问到最多访问的顺序链接结点

2017-06-29 20:18:47 1617

原创 开篇

早在Kotlin还没有出正式版的时候就开始关注,本打算在研三找时间再学习的,奈何Kotlin发展迅速,并且Google I/O2017宣布Kotlin成为开发Android的第三种语言。作为一个Android开发者,也只有加快学习Kotlin的步伐了。从本篇博客开始将会陆续介绍Kotlin语言,本文会假设读者已具备一门语言的基础,比如说Java;本系列以官方文档为资料介绍Kotlin语言。 介绍K

2017-06-26 09:35:30 588

原创 深入理解阻塞队列(四)——LinkedBlockingDeque源码分析

LinkedBlockingDeque是一个基于链表的双端阻塞队列。和LinkedBlockingQueue类似,区别在于该类实现了Deque接口,而LinkedBlockingQueue实现了Queue接口。该类的继承关系如下图: 本文将与LinkedBlockingQueue进行比较,关于LinkedBlockingQueue可以参考:深入理解阻塞队列(三)——LinkedBlocki

2017-06-20 09:31:01 15122 2

原创 深入理解阻塞队列(三)——LinkedBlockingQueue源码分析

LinkedBlockingQueue是一个基于链表实现的可选容量的阻塞队列。队头的元素是插入时间最长的,队尾的元素是最新插入的。新的元素将会被插入到队列的尾部。 LinkedBlockingQueue的容量限制是可选的,如果在初始化时没有指定容量,那么默认使用int的最大值作为队列容量。 概述类继承关系LinkedBlockingQueue的继承关系如下图: 可以参考深入理解阻塞队列(二

2017-06-12 09:01:59 9950 1

原创 深入理解阻塞队列(二)——ArrayBlockingQueue源码分析

在深入理解阻塞队列(一)——基本结构中,介绍了BlockingQueue这一接口的子类以及子接口。本文主要就其中的一个实现类:ArrayBlockingQueue进行源码分析,分析阻塞队列的阻塞是如何实现的。 概述ArrayBlockingQueue底层是使用一个数组实现队列的,并且在构造ArrayBlockingQueue时需要指定容量,也就意味着底层数组一旦创建了,容量就不能改变了,因此Arr

2017-06-05 09:20:20 2991 7

原创 深入理解阻塞队列(一)——基本结构

BlockingQueue是一个继承自Queue的接口,在Queue的队列基础上增加了阻塞操作。简单来说,就是在在BlockingQueue为空时从队头取数据将会被阻塞,因为此时还没有数据可取,一旦队列中有数据了,取数据的线程就会释放得到了数据;如果BlockingQueue有容量限制且满了,那么插入数据的线程将会阻塞,知道队列中有空闲位置可以插入数据了,才会释放。经过上面一段描述,可以发现这不就是

2017-05-31 09:14:03 9320

原创 Volley源码分析(四)——ImageLoader

Volley框架中有一个ImageLoader类,用于加载图片,其使用方法如下: RequestQueue requestQueue = Volley.newRequestQueue(this); ImageLoader imageLoader = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {

2017-05-22 10:46:05 793

原创 Volley源码解析(三)——NetworkDispatcher

在上一篇博客Volley源码解析(二)——CacheDispatcher中介绍了CacheDispatcher,这篇博客将介绍NetworkDispatcher。 RequestQueue的start()方法默认启动了4个NetworkDispatcher,NetworkDispatcher用于将请求执行网络操作。 NetworkDispatcherNetworkDispatcher继承自Thr

2017-05-15 10:34:48 673

编译原理第二版

编译原理第二版,很好的一本书!值得学习

2014-08-15

空空如也

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

TA关注的人

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