自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

RowandJJ

阿里巴巴资深开发工程师

  • 博客(262)
  • 资源 (7)
  • 收藏
  • 关注

原创 Picasso学习笔记

下面是我在学习Picasso过程中做的笔记.关于图片加载库的思考 我们为什么要用图片库呢? 图片库通常会对图片加载逻辑进行封装、优化,比如多级缓存/异步线程调度/图片压缩变换,有了这些特性,开发者不再需要关注内存占用、 OOM、网络请求等问题,而只需关注业务本身的逻辑,这对提高生产效率还是很有帮助的。我通过调研一些图片库,发现一个图片加载库通常有以下模块:请求分发模块。负

2015-11-21 15:36:01 9001 6

原创 【安卓笔记】Volley全方位解析,带你从源码的角度彻底理解

转载请声明原出处(blog.csdn.net/chdjj),谢谢!Volley 是 Google 推出的轻量级 Android 异步网络请求框架和图片加载框架。在 Google I/O 2013 大会上发布。其适用场景是数据量小,通信频繁的网络操作。

2015-02-15 18:30:57 3600 4

原创 【源码】HashMap源码剖析

注:以下源码基于jdk1.7.0_11之前的几篇文章介绍了List集合中一些比较常见的类,比如ArrayList、LinkedList、Vector等。本篇文章将介绍集合框架的另一块内容——Map集合。本文主要介绍HashMap。先回顾下哈希表。哈希表定义:根据设定的hash函数和处理冲突的方式(开放定址、公共溢出区、链地址、重哈希...)将一组关键字映

2014-08-14 08:46:27 3896 2

翻译 深入理解JVM内幕

原文:http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals/在这篇文件里,我会阐述JVM是如何运行的,包括它的结构,它如何去执行字节码,以及按照怎样的顺序去执行,同时我还会给出一些常见错误的示例以及对应的解决办法。虚拟机(Virtual Machine)JRE是由Java API和JVM组成的

2014-04-21 12:56:58 2935

原创 FloatingActionButton源码解析

FloatingActionButton源码解析背景FloatingActionButton(下文以fab代替)是android support design组件库中提供的一个视图控件,是material design设计中fab的官方实现。此控件的官方介绍如下: Floating action buttons are used for a promoted action. They are d

2016-05-02 15:48:49 10614 1

原创 Service#onStartCommand返回值解析

Service#onStartCommand返回值解析Service类有个生命周期方法叫onStartCommand,每次启动服务(startService)都会回调此方法。此方法的原型如下: public int onStartCommand(Intent intent, int flags, int startId)需要关注的是这个方法有一个整型的返回值,它有以下选项:START_STIC

2015-12-29 19:51:13 3107

原创 android冷启动优化

android冷启动优化1. 什么是冷启动冷启动指的是应用第一次启动或者应用被杀死(不在内存中)后重新启动的情况。 你可能已经发现了,这种情况下启动时间会稍长一点。因为它会重新初始化资源(Application等)。app启动时通常会在Application或者所谓的SplashActivity中做初始化工作。如果Application中的工作过多的话, 那么当冷启动的时候,就会出现白屏情况,因为

2015-12-14 16:06:54 3374 2

原创 Downloadmanager in android

Downloadmanager使用 DownloadManager是android提供的一个下载管理器 缺点:不支持断点续传使用方法:创建实例:DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);创建下载任务:DownloadManager.R

2015-11-19 15:22:33 1954 1

原创 HttpCache in android

github地址:https://github.com/Rowandjj/AndroidHttpCache概述http Cache指的是web浏览器所具有的复用本地已缓存的文档”副本”的能力。我们知道,通过网络获取内容有时候成本很高,因而 缓存和重用以前获取的资源的能力成为优化性能很关键的一个方面。http协议本身提供了缓存的支持。缓存的优势1. 减少冗余数据传输2. 缓解网络带宽瓶颈

2015-11-09 22:15:37 3953 4

原创 java8新特性学习

内容: 1. lambda表达式 2. streamAPI 3. 内置函数接口 4. 接口默认实现方法 5. android中使用lambda/streamAPI=======1.lambda表达式: 几种形式:()->statement()->(statement)()->{statement}以Thread为例:new Thread(new Runnable(){ pub

2015-09-28 20:40:16 1946 1

原创 实现一个Material效果的ProgressBar

先来看看效果: 分析下难点: 1. 动画的实现; 2. 边界的控制; 3. 状态保存与恢复; 4. 两种状态的实现,loading状态(不停旋转)、progress状态。分别来看下。 1. 动画如何实现: 将动画进行拆解,可以发现它其实是一个弧不断变长变短的一个过程+弧本身在绕圆形转动两部分组成。 所以可以分开来处理,弧度变长变短可以通过canvas.drawArc的参数st

2015-08-09 20:17:42 3352 2

原创 仿易讯客户端loading效果

下面来实现一个loading效果。具体效果如下: 首先对这个效果进行拆分,它由以下部分组成:1 一个”闪电”样式的图案;2 “闪电”图案背后是一个圆角矩形;3 “闪电”图案上面有一层颜色不断”飘过” 拆分完效果后,思考下如何实现。下面是我的思考过程。1 android sdk并没有提供这样的控件,很显然是需要自定义控件;2 很显然是一个View而不是ViewGroup,所以可以

2015-08-05 21:39:08 1663 1

原创 【安卓笔记】ormlite入门

ps:写这篇文章的目的是尝试下新的markdown编辑器哈哈简介 ORMLite provides a lightweight Object Relational Mapping between Java classes and SQL databases. There are certainly more mature ORMs which provide this functionality

2015-06-02 13:45:07 1684

原创 【安卓笔记】使用DialogFragment托管dialog

普通的AlertDialog在横竖屏切换时会被销毁,如果dialog上面有数据,也将丢失。解决方案是使用DialogFragment。 使用dialogFragment通常需要复写两个方法: onCreateView(LayoutInflater, ViewGroup, Bundle) onCreateDialog(Bundle)如果你想自定义dialog样式,只需要复写onCreat

2015-06-01 20:50:45 1475

原创 【安卓笔记】崩溃日志收集

应用发布之后,总有人反馈说发生crash,但是由于拿不到log,我无法定位问题。后来发现,我们应该收集crash日志,并上传到服务器。国内有很多的三方机构提供了崩溃收集的sdk,我们可以直接拿来使用,比如,我之前做的app使用的是bugHD(http://bughd.com/)提供的服务。但是崩溃收集的原理是什么呢?搜索了一下,发现使用的是java中的uncaughtExceptionHandle

2015-05-22 12:03:55 2092 2

原创 【安卓笔记】gradle入门

随着Android Studio越来越完善,更多的开发者舍弃掉Eclipse。但是新的IDE与以往的Eclipse有很大区别,这导致部分开发者望而却步,其中一个大家觉得比较麻烦的是Android Studio采用的新的构建系统,gradle。那么这篇文章我将对gradle进行一个简单介绍(主要讲gradle配合Android Studio的使用),希望帮助大家熟悉gradle。一. gradle是

2015-04-10 09:45:59 4433 6

原创 【安卓笔记】RecyclerView+SwipeRefreshLayout示例

通过这篇文章你将学会:1.RecyclerView的基本用法;2.SwipeRefreshLayout的基本用法;3.为RecyclerView的item添加响应事件。RecyclerView简单说下,它是用来替代传统ListView的,RecyclerView更加灵活,而且可以与动画很好的结合,你可以很方便的为每个item增加各种动画效果,另外,RecyclerView强制使用ViewHolde

2015-03-29 10:37:31 4702

原创 【安卓笔记】CardView+RecyclerView使用示例

CardView+RecycleView可以非常方便的实现一个卡片式列表布局,之前编写卡片式布局非常麻烦(地址:http://blog.csdn.net/chdjj/article/details/41546477),还得编写各种资源文件。另外,单独使用RecyclerView我们还得关注ItemDecoration,但是使用CardView就不必管了,因为CardView本身就可以设置阴影。下面

2015-03-29 10:29:36 3272

原创 【安卓笔记】硬盘缓存工具类的编写

DiskLruCache(https://github.com/JakeWharton/DiskLruCache)想必大家都很熟悉。(不熟悉的请看这里),它是jakewharton大神写的一个开源库,提供了硬盘缓存的方案。       但是该库的API比较简单,有时候并不能满足我们使用。比如说如果你想把缓存中的数据以Bitmap的形式返回,API并没有提供这样的方法,我们必须通过DiskL

2015-02-16 18:39:03 1905

原创 【安卓笔记】下拉刷新组件的使用及实现

项目中如果需要实现下拉刷新一般有以下几个选择:1.使用开源库Android-pullToRefresh。2.使用support.v4包提供的SwipeRefreshLayout。3.自己实现一个。下面分别简单介绍:注:以listView下拉刷新为例.方案1:使用开源库Android-pullToRefresh1.下载Android

2015-01-25 17:15:18 2764

原创 【安卓笔记】Widget

什么是Widget?App Widget是android提供的桌面小工具,它能够嵌入到桌面,并且可以定期更新自己的数据。如下图所示:如何创建Widget?创建一个Widget需要以下几个组件:1AppWidgetProviderInfo:这个类提供了Widget的元数据,比如Widget的布局,更新频率,大小等等。它通常都使用xml定义,位置

2014-12-31 13:24:00 1745 5

原创 【安卓笔记】view.getX和view.getTranslationX区别

1.view.getTranslationX计算的是该view的偏移量。初始值为0,向左偏移值为负,向右偏移值为正。2.view.getX相当于该view距离父容器左边缘的距离,等于getLeft+getTranslationX。示意图:举例:布局文件:<RelativeLayout xmlns:android="http://schemas.andro

2014-12-31 13:16:35 14604 2

原创 【安卓笔记】ArrayAdapter删除item注意事项

ArrayAdapter提供了remove方法可以删除数据源中的数据,并使界面刷新。下面是其源码: public void remove(T object) { synchronized (mLock) { if (mOriginalValues != null) { mOriginalValues.remove(object

2014-12-31 13:10:33 4310

原创 【安卓笔记】数据适配器(adapter)中的观察者模式

ListView要想显示数据,需要用到数据适配器即Adapter。而当我们删除ListView的某个条目时,数据适配器中的数据源必然发生改变,这时候我们通过调用适配器类提供的notifyDataSetChanged方法通知listview数据发生改变,请求重新绘制。这其中其实使用了一种比较常见的设计模式,即观察者模式。在分析数据适配器中涉及到的观察者模式之前,我们先简单

2014-12-31 13:07:46 2771 1

原创 【安卓笔记】NineOldAndroids动画兼容库的使用

功能介绍:NineOldAndroids是github上的一个开源项目,其作用是为了在低版本android上(API11以下)使用属性动画。它的原理其实也很简单,主要就是判断当前sdk版本,如果大于API11,那么就调用官方的API,否则自己实现动画效果。另外,在API使用方面,它与官方的属性动画基本一致。比如ObjectAnimator、ValueAnimator等等。

2014-12-31 12:58:46 3082

原创 【安卓笔记】滑动删除示例

本文将使用上篇文章介绍的Scroller类来完成一个比较常见的效果——滑动删除效果。代码如下:simpleSwipeListView:package cn.edu.chd.simpleswipelistview;import android.content.Context;import android.util.AttributeSet;import android.

2014-12-03 21:04:44 1902

原创 【安卓】从源码的角度深入分析Scroller

熟悉android的同学必然对Scroller不陌生,Scroller是一个弹性滑动对象,可以制作很多酷炫的滑动效果,Lancher中的滑屏效果就有使用到Scroller。我们知道,View类中的scrollTo和scrollBy方法提供了滑动操作,但是这种滑动操作是瞬间完成的,就是说你为scrollTo提供终点坐标,该方法只要一调用,我们就会发现已经滚动到目的地了,这种方式很显然用户体验是不好的,因而android工程师为我们封装了Scroller类,这个类可以为View带来缓慢移动的效果。

2014-12-02 15:07:24 3078

原创 【安卓笔记】VelocityTracker使用示例

VelocityTracker可以获取触屏事件的速率。使用步骤:1.获取VelocityTracker实例:VelocityTracker mVelocityTracker = VelocityTracker.obtain();2.将MotionEvent事件纳入到VelocityTracker中:mVelocityTracker.addMovement(event);3.

2014-11-30 13:10:28 2507

原创 【安卓笔记】气泡式ListView

实现效果:要想实现这个效果,我们需要找到气泡背景的9.png图片,大家可以从qq微信等apk包中提取。实现步骤:1.编写布局文件。每个条目的布局activity_chat_singlemessage.xml<LinearLayout xmlns:android="http://schemas.androi

2014-11-28 16:35:28 2225 2

原创 【安卓笔记】ExpandableListView的使用

实现效果:即可伸展的ListView其实跟普通的ListView使用没啥区别,只是ListView改为了ExpandableListView,另外适配器由BaseAdapter也换成了BaseExpandableListAdapter。步骤:1.编写布局文件。分为三个,分别是主布局,group分组布局,

2014-11-28 16:29:20 2432

原创 【安卓笔记】快速创建卡片式ListView

首先来看我们要实现的效果:ListView的每个item都像卡片一样摆在界面上,另外每个item下方有3d阴影效果。需求明确之后,下面我们就来实现这一效果。1.为每个item制作阴影以及圆角效果。    drawable目录下创建card_background.xml

2014-11-27 15:11:43 6406

原创 升级android sdk到5.0时,创建项目出现错误:No resource found that matches the given name 'android:Widget.Material.A

升级sdk 到5.0时,创建项目时会多创建一个库项目,叫appcompat_v7。创建完成后,这个项目可能会报错,诸如出现:No resource found that matches the given name 'android:Widget.Material.ActionButton'等错误。下面是一些解决方案:解决方案1:使用sdk ma

2014-11-27 11:11:27 3939

翻译 GC入门指南(三)----垃圾收集器类型

这篇文章我们来学习下所有可用的垃圾收集器类型。java目前有四种类型的垃圾收集器:1.串行垃圾收集器(Serial Garbage Collector);2.并行垃圾收集器(Parallel Garbage Collector);3.CMS垃圾收集器(CMS Garbage Collector);4.G1垃圾收集器(G1 Garbage Collector);

2014-10-28 22:46:26 2094

翻译 GC入门指南(二)------GC工作原理

本系列博客旨在帮助大家理解java垃圾收集器及其工作原理,这是系列的第二篇。java垃圾回收其实是由一个可以进行自动内存管理的进程完成的,这使得程序员在写代码的时候不必过多考虑内存释放与回收的问题。垃圾收集器如何初始化:作为一个自动化的进程,程序员并不需要显式地在代码中初始化垃圾收集进程。所谓的System.gc()和Runtime.

2014-10-28 22:41:50 1576

翻译 GC入门指南(一)------基础

java中,对象内存空间的分配与回收都是通过JVM的gc进程自动进行的。java程序员并不需要像c程序员那样手动去管理内存空间。这也是java受欢迎的众多原因之一。接下来我将通过四篇文章介绍GC。1.GC简要介绍;2.GC工作原理;3.GC收集器种类;4.GC的监控与分析.这是本系列的第一篇,我将介绍一些基础知识例如JDK,JRE,JVM

2014-10-28 22:37:12 2052

原创 【安卓笔记】AsyncTask源码剖析

前言:初学AsyncTask时,就想研究下它的实现源码,怎奈源码看了好几遍都没看懂,于是搁置了。最近心血来潮,又看了一些源码,如HandlerThread,IntentService,AsyncQueryHandler等,收获颇深,于是乎想回头再研究下AsyncTask,没想到这次居然很容易看懂了。。。正文:注:1.读者阅读本文前,必须对android的Handler机制以

2014-09-07 21:20:53 2066

原创 【安卓笔记】AsyncQueryHandler源码剖析

AsyncQueryHandler类用于提供异步数据库操作(增删改查)功能。本文视图从源码角度分析这个类。1.AsyncQueryHandler使用方式:AsyncQueryHandler handler = new AsyncQueryHandler(this.getContentResolver()) { @Override protected void

2014-09-05 23:47:33 2459

原创 【安卓笔记】IntentService源码剖析

Service组件想必都不陌生,这里不费口舌了。强调一点,Service组件默认运行在UI线程,所以也是会阻塞主线程的,使用时切记不可在Service中执行耗时操作,而应该创建子线程,异步执行。IntentService类封装了在Service中创建子线程的工作(其实创建的是HandlerThread),我们只需继承IntentService,复写其onHandleIntent方法即可,o

2014-09-04 23:51:59 2198

原创 【安卓笔记】HandlerThread源码剖析

有时候我们需要在应用程序中创建一些常驻的子线程不定期地执行一些计算型任务,这时候可以考虑使用HandlerThread,它具有创建带消息循环的子线程的作用。一、HanderThread使用示例先熟悉下HandlerThread的一般用法。我们创建一个如下所示的Activity:package com.example.handlethreaddemo;import

2014-09-04 23:47:44 2072

原创 创建线程的三种方式浅析

方式1,继承Thread:new Thread() { public void run() { System.out.println("hello world"); } }.start();方式2,实现Runnable接口:new Thread(new Runnable() { @Override public void run() {

2014-08-28 18:03:46 1528

Android Programming Push the Limits

Android Programming Push the Limits,非常好的一本书。 不要分。

2015-04-08

volley测试代码

包括客户端以及对应的服务端(servlet),客户端代码中的各种url需要改成你电脑的ip。 配合这篇文章:http://blog.csdn.net/chdjj/article/details/43836615

2015-02-15

手机号码归属地离线数据库文件

手机号码归属地离线数据库文件(格式为.db)

2014-07-21

service全面解析

请查看我的博客:全面解析service组件一文的相关描述

2014-02-17

android下解析xml文件的demo

android下解析xml文件的demo

2014-02-08

软件工程 课件

软件工程 课程 的所有课件,非常完整 内容包括概述、软件过程、项目管理、需求、面向对象分析与设计、实现、测试、软件演化等内容

2013-06-04

jdbc连接mysql的文档

MySQL Connector/J Developer's Guide Abstract This manual describes how to install, configure, and develop database applications using MySQL Connector/J, the JDBC driver for communicating with MySQL servers. For release notes detailing the changes in each release of Connector/J, see MySQL Connector/J Release Notes. Document generated on: 2013-01-25 (revision: 34037)

2013-05-04

空空如也

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

TA关注的人

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