自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 Android使用Messenger实现进程间双向通信

在了解本文即将学到的技能外,有些知识还是有必要提前知道的,这样才会更容易理解本文即将讲到的知识点。需要提前预热的知识点:1、Android四大组件之一Service,要知道怎样去写一个Service,Service有哪两种启动方式;2、Android Service启动方式之Bound Service;3、Android基础知识之Messenger;掌握了这三个知识点,就可以快速入

2016-07-24 12:01:03 3387

原创 RxAndroid 实践快速入门

一、RxJava概念    RxJava官方定义    一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。用一个词概括:异步,也就是说RxJava也可以理解为一个处理异步的类库。Android也提供了处理异步的工具AsyncTask、Handler,当我们处理较复杂的异步时,异步代码难写且难以读懂。RxJava相对于AsyncTask和Handler的好处就是让异

2016-05-25 17:17:25 6138 6

原创 Google 官方Android MVP架构实践

一、Google 官方MVP介绍近期,关于Android开发架构的讨论沸沸扬扬,各大技术平台随处可见关于Android架构的技术文章。MVC、MVP、MVVM等等,就目前的形式来看,MVP模式在Android开发领域界逐渐流行了起来。前段时间,Google也忍耐不住Android MVP架构的火热程度,给广大Android程序员带来了福利,推出了Google官方MVP架构例子。源码见: htt

2016-05-10 11:11:37 17855 5

原创 Android Dagger2简单入门

一、什么是dagger2?Dagger2 是为Android和Java平台提供的一个完全静态的,在编译时进行依赖注入的框架。我们在做andriod开发的时候,一个Activity里面通常会实例化很多的类,才能使用这些的类中的方法和字段,通常,一个类很多Activity都会用到,我们就会在每个acitivity里面实例化该类。这样导致的问题就是,Activity会很依赖这些类,导致程序的耦合严重

2016-12-23 01:17:53 4303 2

原创 Android Git代码版本控制

一、选择阿里云code作为项目代码托管由于Github私有空间需要费用,所有这里选择阿里云code作为代码托管。点击阿里云code,注册账号,新建你要托管的项目空间,阿里云code会给你生成一个Git管理地址。二、Git环境搭建 1、Windows环境2、Mac环境Git安装步骤文档1)在Mac系统中,通常会预装Git,你可以通过打开命令终端

2016-11-22 13:32:41 1676 3

原创 学习笔记 Android 使用AIDL实现进程间通信

一、编写服务端代码1、新建一个Book类,实现Parcelablepackage com.licheng.android.weextest;import android.os.Parcel;import android.os.Parcelable;/** * Created by licheng on 15/11/16. */public class Book im

2016-11-15 15:20:21 638

原创 学习笔记 Android LocalBroadcastManager的使用

LocalBroadcastManager简介LocalBroadcastManager是Google官方AndroidSupport包提供的一个工具,用来管理广播的类。只能用来在同一个应用的不同组件之间发送广播,进行数据交互。和普通的全局广播相比较,LocalBroadcastManager的安全性相对较高。布局文件<LinearLayout xmlns:android="

2016-11-15 10:51:34 651

原创 weex环境配置快速上手

一、前言        4月21日,阿里巴巴在Qcon大会上宣布跨平台移动开发工具Weex开放内测邀请。        Weex能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持iOS、安卓、YunOS及Web等多端部署。        对于移动开发者来说,Weex主要解决了频繁发版和多端研发两大痛点,同时解决了前端语言性能差

2016-10-31 23:02:52 3552

原创 Android greenDAO数据库配置教程

一、环境配置1、在Android Studio中,在.src/mian目录下新建一个java-gen文件夹,和java文件夹同级。用于存放greenDAO生成的DaoMaster、DaoSession、Table、TableDao实体类。2、配置项目的app.gradle文件,指定java-gen文件,引入greenDAO第三方jar包sourceSets {

2016-10-08 15:55:34 3246 3

原创 Android Proguard混淆打包经验总结

作为一名Android开发,应该了解并尝试给自己的项目进行Proguard混淆打包。项目经过Proguard混淆打包后,会发现apk包体积会变小,也就是混淆可以使得apk瘦身;并且反编译apk的时候会发现, 项目中的源码都被处理过,进一步保障了apk的安全;这就是我所理解的Proguard混淆打包的两个优点。不过,想要真正给自己的项目进行Proguard混淆打包,可不是一件容易的事情,真正尝试去做

2016-09-23 14:22:38 3531

原创 自定义PopWindow模仿微信拍照上传头像

我们先来看看微信的效果图:然后我们来自己实现:一、自定义布局 res/layout/popwindow_takephoto.xml<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_w

2016-08-16 01:55:48 3438

原创 Android线程学习笔记

UI线程要处理所有任务时,那些耗时很长的操作——诸如访问网络或查询数据库等——将会阻塞整个UI(线程)。一旦线程被阻塞,所有事件都不能被分发,包括屏幕绘图事件。从用户的角度看来,应用程序看上去像是挂起了。更糟糕的是,如果UI线程被阻塞超过一定时间(目前大约是5秒钟),用户就会被提示那个可恶的“应用程序没有响应”(ANR)对话框。此外,Andoid的UI组件包并不是线程安全的。因此不允许

2016-08-05 01:30:57 1326

原创 《Android开发艺术探索》之View的事件体系和工作原理学习笔记

书中把自定义View分为下面4类:1、继承View重写onDraw方法这种方法主要用于实现一些不规则的效果,不方便通过布局的组合方式来达到,一般需要自己绘制图形并实现动画等效果。需要重写onDraw方法。采用该方法需要自己支持wrap_content和padding。2、继承ViewGroup派生特殊的Layout这种方法主要用于实现自定义的布局,除了系统的LinearLayout

2016-08-03 23:38:40 743

原创 Android动画知识点汇总

Android的动画可以分为三种:View动画、帧动画和属性动画。View动画通过对场景里的对象不断做图像变换(平移、缩放、旋转、透明度)从而产生动画效果,View动画支持自定义。帧动画通过顺序播放一系列图像从而产生动画效果。属性动画通过动态改变对象的属性从而达到动画效果。关于Android动画的大部分知识点,我用下面这张图来概述。一、View动画View动画支持4中动画效果,分别

2016-07-27 00:33:00 754

原创 ScrollView滑动监听实现界面动画效果

Andriod进阶知识之一,滑动监听也是初学者不得不学习的一项技能。关于滑动,你能想到什么?ScrollView、ListView、GridView、WebView、RecyclerView。。。你是否写过或研究过ScrollView滑动监听的代码呢?其他控件的滑动监听代码是怎么实现的呢?看看下面的效果,是不是很想实现?让我们带着这些疑问,一起进入Android滑动监听的世界吧!

2016-06-21 00:32:35 4629 2

原创 Effective Java 第十五条:使可变性最小化

复数类Complex:public final class Complex { private final double re; private final double im; public Complex(double im, double re) { this.im = im; this.re = re; } p

2016-04-20 14:51:28 611

原创 Effective Java 第九条:覆盖equals时总要覆盖hashCode

先来看一个例子:PhoneNumer类public class PhoneNumber { private final int areaCode; private final int prefix; private final int lineNumber; public PhoneNumber(int areaCode, int prefix, int li

2016-04-20 13:35:44 550

原创 Effective Java 第八条:覆盖equals请遵守通用约定

首先介绍一下Java中equals通用约定,分别是:自反性、对称性、一致性、传递性。检查自反性的通用方法:将对象扔到List里,然后看List.contains()是否返回true。首先来看一个违反对称性的例子:public class CaseInsesitiveString { private final String s; public Ca

2016-04-18 22:18:16 494

原创 Android Studio 教你在debug调试模式下使用正式签名

这个问题是我在配置QQ第三方登陆时遇到的,QQ第三方登陆如果上传正式发布包到腾讯应用宝,也就是正式版的签名,测试三方登陆时也只能用正式签名测试,对于开发者来说,实在太痛苦了,因为开发者做测试都是运行起来都是在debug模式下,签名也是debug模式下的签名。腾讯开放平台有一个应用调试者QQ号测试,不知道是不是填写了开发者的QQ号之后就可以用正式版的签名做第三方登陆测试了,每次我点击添加,结果就这样

2016-04-18 19:10:31 9219 2

原创 Effective Java 第五条:避免创建不必要的对象

反例:public class Person { private final Date birthDate; public Person(Date birthDate) { this.birthDate = birthDate; } public boolean isBabyBoomer(){ //判断婴儿是否在生育高峰期出生

2016-04-10 19:28:38 448

原创 Effective Java 第二条:遇到多个构造器参数时要考虑用构建器

对于Java处理多参数时,先给大家上两个程序员平时最喜爱用的写法:第一:重叠构造器public class NutritionFacts { //重叠构造器 private final int servingSize; private final int servings; private final int calories; private fin

2016-04-10 00:28:15 652

原创 Effective Java 第一条:考虑用静态工厂方法代替构造器

平时大家常用的String类源码就是典型的静态工厂方法:/** * Returns the string representation of the given double. */public static String valueOf(double value) { return Double.toString(value);}/** * Returns the

2016-04-04 22:15:43 476

原创 Java设计模式之策略模式

模式结构:Context:环境类Strategy:抽象策略类ConcreteStrategy:具体策略类UML图:例子代码:环境类:public class Context { private Strategy strategy; public void setStrategy(Strategy strategy

2016-03-22 10:28:53 406

原创 Java设计模式之代理模式

模式结构:Subject:抽象主题角色Proxy:代理主题角色RealSubject:真实主题角色UML图:例子代码:抽象主题角色:public interface Subject { void request();}具体主题角色:public class ConcreteSubject implements S

2016-03-18 14:14:22 336

原创 Android项目开发经验汇总

1、图片byte数据转Bitmap使用Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath())容易导致内存溢出。public static Bitmap decodeImg(byte[] imgByte) { Bitmap bitmap = null; InputStream inpu

2016-03-18 11:13:26 533

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

模式结构:Subject:目标ConcreteSubject:具体目标Observer:观察者ConcreteObserver:具体观察者UML图:例子代码:目标抽象类:public abstract class Subject { private List observerList = new ArrayList()

2016-03-18 11:02:19 935

原创 Java设计模式之装饰器模式

装饰器模式结构:Component:抽象构件ConcreteComponent:具体构件Decorator:抽象装饰类ConcreteDecorator:具体装饰类UML图:例子代码:抽象构件public interface Component { void operation1(); void operati

2016-03-16 10:58:15 383

原创 Java设计模式之适配器模式

适配器模式结构:Target:目标抽象类Adapter:适配器类Adaptee:适配者类Client:客户类UML图:例子代码:public interface Target { void request();}public class Adapter implements Target { Adaptee

2016-03-12 11:25:44 328

原创 Java设计模式之单例模式

单例模式目的:保证一个类仅有一个实例。单例类拥有一个私有构造函数,确保用户无法通过new关键字直接实例化类。单例模式实现过程注意三点:1、单例类的构造函数为私有;2、提供一个自身的静态私有成员变量;3、提供一个公有的静态工厂方法。适用环境:系统要求提供一个唯一的序列号生成器;客户调用类的单个实例只允许适用一个公共访问节点,除了该公共访问点

2016-03-12 10:29:54 504

原创 算法题目三:判断数组中任意三条边能否组成一个三角形,若能返回1,不能返回0

算法一:正确率90%,算法效率分0%算法二:正确率,算法效率均100%public class Triangle { public static void main(String[] args) { int[] str = {10,2,5,1,8,20}; System.out.println(solution(str));

2016-03-06 16:08:19 1877

原创 算法题目二:找到数组中迷失的数字

public class TestTwo { public static void main(String[] args) { int[] str = {2,4,1,5}; System.out.print(solution2(str)); } public static int solution(int[] A){ int

2016-03-06 16:00:36 383

原创 算法题目一:如果数组中数字重复最多的次数大于数组长度的一半,返回1,否则返回0

public class TestOne { public static void main(String[] args) { int[] str = {5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,6,4,6,3,7}; System.out.println(solution(str)); } public static i

2016-03-06 15:58:58 622

原创 Java设计模式之建造者模式

建造者模式结构:UML图:例子代码:public class InsuranceContract { //保险合同编号 private String contractId; /** * 被保险人员的名称,同一份保险合同,要么跟人员签订,要么跟公司签订 * 也就是说,“被保险人员”和“被保险公司”

2016-03-05 15:54:36 532

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

抽象工厂模式结构:

2016-03-05 15:33:26 407

转载 Android的消息处理机制 Handler Looper Message

Looper线程就是一个不断循环工作的线程。被用来设计将一个普通线程变成Looper线程。一个Thread只能有一个Looper对象handler扮演了往MessageQuene上添加和处理消息的角色,通知MQ它要执行任务(sendMessage),并在Looper到自己的时候执行该任务(handlerMessage),整个过程是异步的。一个线程可以有多个handler,但是只

2016-01-17 18:38:10 391

空空如也

空空如也

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

TA关注的人

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