自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 资源 (2)
  • 收藏
  • 关注

原创 EasyEmoji

最近由于公司项目需要,开发一个类似微信表情框,于是花了好些时间整出一个emoji框架,实现最简洁的方式增加一个功能又超强大的表情框架,并且分享出来,供大家使用,在使用中一起改进完善。让App添加表情最简单,最快速,并且无需更改原有activity布局。 照例先上图:可自由扩展面板功能:可自由扩展emoji表情功能:DownloadGradle:Step 1. Add the JitPack rep

2017-04-07 00:23:08 783

原创 Android 检测应用中的UI卡顿

在做app性能优化的时候,大家都希望能够写出丝滑的UI界面,目前已经有两种比较典型方式来检测了:利用UI线程Looper打印日志利用Choreographer一,利用loop()中打印的日志(1)原理大家都知道在Android UI线程中有个Looper,在其loop方法中会不断取出Message,调用其绑定的Handler在UI线程进行执行。大致代码如下: public static voi

2017-03-13 12:53:39 837

原创 如何设计实现一个LRU Cache?

1. 什么是LRU Cache?在LeetCode上看到一个LRU Cache实现的题目,题目描述是这样的: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set. get(key)

2017-02-19 21:16:03 1377

原创 JVM GC 原理与垃圾收集器简析

JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收。何时分配在概念上可简单认为new时分配怎样分配- JVM内存分配策略对象分配优先在Eden区分配优先在Eden区分配,如果启用了本地线程分配缓冲, 则优先在TLAB上分配, 少数情况能会直接分配在老年代, 或被拆分成标量类型在栈上分配(JIT优化). 分配的规则并不是百分百固定, 细节主要取

2017-01-13 22:12:59 725

原创 Android 面试题四

一. 对象锁和类锁是否会互相影响?对象锁:Java的所有对象都含有1个互斥锁,这个锁由JVM自动获取和释放。线程进入synchronized方法的时候获取该对象的锁,当然如果已经有线程获取了这个对象的锁,那么当前线程会等待;synchronized方法正常返回或者抛异常而终止,JVM会自动释放对象锁。这里也体现了用synchronized来加锁的1个好处,方法抛异常的时候,锁仍然可以由JVM来自动释

2017-01-02 18:31:42 629

原创 android 面试题三

一. 静态内部类、内部类、匿名内部类,为什么内部类会持有外部类的引用?持有的引用是this?还是其它?静态内部类:使用static修饰的内部类 内部类:就是在某个类的内部又定义了一个类,内部类所嵌入的类称为外部类 匿名内部类:使用new生成的内部类 因为内部类的产生依赖于外部类,持有的引用是: 类名.this二. ArrayList和Vector的主要区别是什么?1)ArrayList和Vec

2017-01-02 16:01:31 891

原创 Java HashMap 核心源码解读

一.概述在Java中每一个对象都有一个哈希码,这个值可以通过hashCode()方法获得。hashCode()的值和对象的equals方法息息相关,是两个对象的值是否相等的依据,所以当我们覆盖一个类的equals方法的时候也必须覆盖hashCode方法。例如String的hashCode方法为:public int hashCode() { int h = hash; if (h =

2017-01-01 00:19:20 561

原创 Android HTTP和HTTPS那点事

先看看网络OSI(Open System Interconnect)模型: CA证书是什么?CA(Certificate Authority)是负责管理和签发证书的第三方权威机构,是所有行业和公众都信任的、认可的。 CA证书,就是CA颁发的证书,可用于验证网站是否可信(针对HTTPS)、验证某文件是否可信(是否被篡改)等,也可以用一个证书来证明另一个证书是真实可信,最顶级的证书称为根证书。除

2016-12-31 23:09:13 6052

原创 Javascript Promise让代码更优雅

回调函数真正的问题在于他剥夺了我们使用 return 和 throw 这些关键字的能力。而 Promise 很好地解决了这一切。在异步编程中,我们经常需要使用回调函数,过多层级的回调会使本来简洁的代码变得深奥隐晦难明,使用promise能完美解决回调嵌套问题,让代码赏心悦目,还能实现更多强大的功能,比如现实网络编程中的同步功能等。javascript里的promise功能和使用都比较类似于java

2016-12-18 20:31:00 2689

原创 android进程间通信

由于android系统中应用程序之间不能共享内存。因此,在不同应用程序之间交互数据(跨进程通讯IPC(Inter-Process Communication))就稍微麻烦一些。在Linux系统进程间通信方式:(1)传统机制。如管道(Pipe)、信号(Signal)和跟踪(Trace),适用于父子进程或兄弟进程,其中命名管道(Named Pipe),支持多种类型进程(2)System V IPC机制。

2016-12-02 16:58:14 655

原创 Java设计模式之观察者模式

观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。      观察者模式的结构一

2016-11-20 10:19:07 848

原创 android触摸event传递源码分析二

上一篇文章分析了input event怎么传递到activity中,下面接着分析在activity中的具体传递,也是event事件传递最重要的地方。接上回,先看看activity中收到event后:public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN)

2016-11-12 17:17:57 642

原创 Javascript学习笔记二

JavaScript 对象JavaScript 中的所有事物都是对象:字符串、数字、数组、日期,等等。对象是拥有属性和方法的数据。创建新对象有两种不同的方法: 1. 定义并创建对象的实例 2. 使用函数来定义对象,然后创建新的对象实例创建直接的实例本例创建名为 “person” 的对象,并为其添加了四个属性:person=new Object();person.firstname="Bil

2016-11-09 16:06:10 906

原创 JavaScript学习笔记(一)

一个完整的 JavaScript 实现是由以下 3 个不同部分组成的: 核心(ECMAScript) : 描述了JavaScript 的语法和基本对象; 文档对象模型(DOM):描述了处理网页内容的方法和接口; 浏览器对象模型(BOM):描述了与浏览器进行交互的方法和接口。ECMAScript 语法JavaScript 对大小写是敏感的变量变量是存储信息的容器。变量是弱类型的,使用 va

2016-11-07 13:11:06 1039

原创 一个Android app好的构架

一个好的开发框架,就像一个艺术品,这里给大家推荐一个 android 的框架,使用 Rxjava + retrofit + dagger2 + mvp,结合了当下比较流行的框架,项目层次非常清晰,易于扩展和维护。框架结构图与常规的 MVP 不同的是,在 modle 层和 view 层通过EventBus 连接,当数据发生变化时,发出对应的 event,注册了这个 event 的 view会采取对应的

2016-10-31 10:51:01 2067

原创 Cookie和Session机制

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。什么是CookieCookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、F

2016-10-24 20:26:54 564

原创 Java设计模式之---装饰者模式

装饰者模式装饰者模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),结构型设计模式之一。动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。意图:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。设计原则:多用组合,少用继承。 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类

2016-10-20 14:29:59 715

原创 Android中触摸事件MotionEvent的来源

MotionEvent的来源在activity中我们经常需要处理触摸事件,要了解android触摸事件event的传递是比较复杂的,今天先看看activity中触摸事件的来源。 首先看Activity的实现,如下,Activity实现了一个特殊的接口:Window.Callback。public class Activity extends ContextThemeWrapper

2016-10-18 16:11:50 3065

原创 Java Annotation 简析(二)

在上一篇文章解析了java Annotation的概念和基本用法,再简单回顾下注解的作用: a.生成文档。这是最常见的,也是java 最早提供的注解。常用的有@see @param @return 等 b. 标记,用于告诉编译器一些信息,比如 @Override等, c. 编译时动态处理,如动态生成代码 d. 运行时动态处理,如得到注解信息上篇文章演示了处理运行时动态处理注解,这篇文件讲解注

2016-10-04 23:16:11 1668

原创 Dagger2使用简析

是时候学习dagger2了

2016-09-22 16:32:21 1935

原创 Java设计模式之抽象工厂模式

上两篇讲解了简单工厂模式和工厂方法模式,下面讲解工厂模式的最后一个抽象工厂模式随着客户的要求越来越高,宝马车需要不同配置的空调和发动机等配件。于是这个工厂开始生产空调和发动机,用来组装汽车。这时候工厂有两个系列的产品:空调和发动机。宝马320Li系列配置A型号空调和A型号发动机,宝马520Li系列配置B型号空调和B型号发动机。概念:抽象工厂模式(Abstract Factory Pattern):提

2016-09-20 11:12:07 654

原创 Java设计模式之工厂方法模式

Java设计模式之工厂方法模式上一篇讲解了简单工厂模式,下面讲解简单工厂模式的升级版,工厂方法模式。工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产

2016-09-20 10:59:51 535

原创 Java设计模式之简单工厂模式

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 比如你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例;在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作。模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象

2016-09-17 23:51:58 768

原创 Java Annotation 简析

二、Annotation 概念手把手教你打造bindview注解

2016-09-11 10:13:41 691

原创 Retrofit 使用 一

前言时至今日,Android的网络框架不再像之前那么到处都是,随着Google把 HttpClient直接删掉,似乎意味着Android越来越成熟。网络框架中的佼佼者Volley也不再那么光鲜,取而代之的是 Retrofit 和 okHttp。如今不会使用Retrofit + okHttp + RxJava等一系列技术,就迈不进新时代的门槛,跟不上时代的步伐。1.

2016-09-08 16:42:43 2733

原创 android 自定义View 三 ---- LayoutInflater

说到自定义view就不得提到LayoutInflater,虽然我们在代码中可以直接用new方法构造出各种View,然后再添加各种属性去控制View的大小和位置等布局,但是这是很复杂繁琐的,细节优化更麻烦困难,面对复杂布局,用代码构造更显得无力。这时我们必须借助于LayoutInflater这个神器了。LayoutInflater的作用就是能够将value/layout目录下的xml布局文件,实

2016-09-05 17:56:02 1853

原创 Android 自定义View 二

在上一篇文章android 自定义view 中我们总结了自定义View的几大步骤如下:1、自定义View的属性2、在View的构造方法中获得我们自定义的属性3、重写onMesure方法4、重写onLayout方法5、重写onDraw方法因为上篇文章中我们完成了LabelImageView中的一个LabelView子view,所以不用重写onLayout方

2016-09-04 21:35:52 543

原创 Android 自定义View

Android 开发必然会面对自定义View, 因为许多时候android sdk里现有的View 并不能满足我们项目的需求。很多的Android入门程序猿来说对于Android自定义View,可能都是比较恐惧的,但是这又是高手进阶的必经之路。这里老鸟抛砖引玉一下,总结下自定义View的步骤:1、自定义View的属性2、在View的构造方法中获得我们自定义的属性3、重写

2016-08-15 21:17:49 2348

原创 【Java并发编程】Runnable和Thread实现多线程的区别

Java中实现多线程有两种方法:继承Thread类、实现Runnable接口。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势:    1、可以避免由于Java的单继承特性而带来的局

2016-08-10 11:21:08 1025

原创 你真的会写Java单例么?

java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。  单例模式有一下特点:  1、单例类只能有一个实例。  2、单例类必须自己自己创建自己的唯一实例。  3、单例类必须给所有其他对象提供这一实例。  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显

2016-08-04 20:28:20 2589

原创 面向对象六大原则----接口隔离原则,迪米特原则

Java 中面向对象编程六大原则:单一职责原则 英文名称是Single Responsibility Principle,简称SRP开闭原则 英文全称是Open Close Principle,简称OCP里氏替换原则 英文全称是Liskov Substitution Principle,简称LSP依赖倒置原则  英文全称是Dependence Inversion

2016-08-02 17:58:30 1404

原创 面向对象六大原则----里氏替换原则,依赖倒置原则

Java 中面向对象编程六大原则:单一职责原则 英文名称是Single Responsibility Principle,简称SRP开闭原则 英文全称是Open Close Principle,简称OCP里氏替换原则 英文全称是Liskov Substitution Principle,简称LSP依赖倒置原则  英文全称是Dependence Inversion

2016-07-29 17:05:45 4901

原创 面向对象六大原则----开闭原则

Java 中面向对象编程六大原则:单一职责原则 英文名称是Single Responsibility Principle,简称SRP开闭原则 英文全称是Open Close Principle,简称OCP里氏替换原则 英文全称是Liskov Substitution Principle,简称LSP依赖倒置原则  英文全称是Dependence Inversion

2016-07-27 17:59:31 6989

原创 面向对象六大原则----单一职责原则

1、让你的代码更清晰简单——单一职责原则单一职责原则的英文名称是Single Responsibility Principle,简称SRP。它的定义是:就一个类而言,应该仅有一个引起它变化的原因。简单来说,一个类中应该是一组相关性很高的函数、数据的封装。单一职责的划分界限并不是总是那么清晰,很多时候都是需要靠个人经验来界定。当然,最大的问题就是对职责的定义,什么是类的职责,以及怎么划分类的

2016-07-24 15:21:04 6970

原创 Handler,looper,MessageQueue及 handlerThread 之间的关联和用法

Handler 是什么?这个是android面试官最喜欢问的问题,用脚趾都能回答出来,Handler可用于android多线程通信,可以用来更新UI的,用来发送message,处理message的。于是在很多地方我们都直接new 一个Handler 来使用,那么问题来了,如果你在一个自定义线程中new一个Handler,这个Handler能用么?能 or 不能。 Why?呵呵,现在老鸟带你揭开

2016-07-20 16:07:42 646

原创 Android EventBus 3.0 使用及源码解析一

在编程过程中,当我们想通知其他组件某些事情发生时,我们通常使用观察者模式,在android中我们可以使用eventbus来实现类似的需求,EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递。它使用简单,并将事件发布和订阅充分解耦,从而使代码更简洁。一、EventBus使用1,首先android studio项目的

2016-07-18 16:07:57 442

转载 Android App 内存泄露之Handler

Android App 内存泄露之HandlerHandler也是造成内存泄露的一个重要的源头,主要Handler属于TLS(Thread Local Storage)变量,生命周期和Activity是不一致的,Handler引用Activity会存在内存泄露。看一下如下代码[html] view plain copy /**   *    * 实现的主要功能。   * @ve

2016-07-15 19:43:37 409

原创 Gradle自定义插件

Gradle自定义插件在Gradle中创建自定义插件,Gradle提供了三种方式:在build.gradle脚本中直接使用在buildSrc中使用在独立Module中使用开发Gradle插件可以在IDEA中进行开发,也可以在Android Studio中进行开发,它们唯一的不同,就是IDEA提供了Gradle开发的插件,比较方便创建文件和目录,而Android Stud

2016-06-23 20:46:03 3917

原创 android apk 编译打包解析

Android  编译打包过程图如下一般会经过以下几个步骤:1.用aapt命令生成R.java文件2.用aidl命令生成相应java文件3.用javac命令编译java源文件生成class文件4.用dx.bat将class文件转换成classes.dex文件5.用aapt命令生成资源包文件resources.ap_

2016-06-23 14:03:49 561

原创 Groovy的基础语法

Groovy 的语法融合了 Ruby、Python 和 Smalltalk 的一些最有用的功能,同时保留了基于 Java 语言的核心语法。对于Java 开发人员,Groovy 提供了更简单的替代语言,且几乎不需要学习时间。 语句Groovy的语句和Java类似,但是有一些特殊的地方。例如语句的分号是可选的。如果每行一个语句,就可以省略分号;如果一行上有多个语句,则需要用分号来分隔。 x = [1,

2016-06-22 13:54:00 1382

android 蓝牙串口通信代码

基于android 蓝牙串口通信搜索,配对,收发数据。很好的android 蓝牙通信代码。

2014-10-16

Linux_C_函数使用手册

函数很全,查看方便,很使用,C开发必备!

2012-02-07

空空如也

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

TA关注的人

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