自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

robert的专栏

Android开发,java编程

  • 博客(43)
  • 资源 (8)
  • 收藏
  • 关注

原创 Volley源码解析使用方式和使用场景分析

Volley是Google在2013年推出的一个网络库,用于解决复杂网络环境下网络请求问题。刚推出的时候是非常火的,现在该项目的变动已经很少了。项目库地址为https://android.googlesource.com/platform/frameworks/volley通过提交历史可以看到,最后一次修改距离今天已经有一段时间了。而volley包的release版本也已经很久没有更新了。author Jeff Davidson <jpd@google.com> Sun Mar 13 16:35:59

2016-06-14 22:25:33 4817 3

原创 Android 事件总线OTTO使用说明和源码解析

OTTO是Square推出的库,地址:https://github.com/square/ottoOTTO基于Guava项目的Android支持库,如果你在Android程序开发的过程中想要不同的组件之间进行有效的通信可以使用这个库。通过otto库可以。otto的官方介绍An enhanced Guava-based event bus with emphasis on Android support.Otto is an event bus designed to decouple differen

2016-06-10 21:59:21 7465

原创 Retrofit2使用方式和源码解析

Retrofit2对Retrofit做了很大改进,做一下详细比对参考https://inthecheesefactory.com/blog/retrofit-2.0/en底层okhttp不同Retrofit 默认使用okhttpRetrofit2 默认使用okhttp3Service接口定义方式不同在Retrofit2之前如果定义一个同步的函数,应该这样定义:p

2016-06-04 23:33:01 13104

原创 Picasso的使用和源码解析

一、基本介绍picasso是Square公司开源的一个Android图片下载缓存库,github地址https://github.com/square/picasso,可以实现图片下载和缓存功能。Picassso的特点有:自动将图像缓存在本地,自带内存和硬盘二级缓存功能通过图片压缩转换以减少内存消耗自动处理了ImageView的回收,自动取消不在视野范围内的ImageV

2016-06-03 23:49:42 9236

原创 EventBus的使用和源码解析

基本介绍EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递,这里的事件可以理解为消息,本文中统一称为事件。事件传递既可用于 Android 四大组件间通讯,也可以用户异步线程和主线程间通讯等等。EventBusEventBus3.0版本有较大的更新,性能上有很大提升。这里只介绍新版本。传统的事件传递方式包括:Handler

2016-06-01 00:59:13 10308

原创 Android进程分类与管理

Android采 取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多 内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。那Android什么时候结束进程?结束哪个进程呢?之前普遍的认识是Android是依据一个名为LRU(last recently used 最近使用过的程序)列表,将程序进行排序,并结束最早的进程。但实际上这里面有更多的细节

2016-06-30 13:53:05 6144

原创 Android热补丁技术方案整理

项目快速迭代过程中,不可避免的出现BUG,Android线上出现问题,通常需要发版解决。紧急发版,用户不一定升级,强制升级又不友好,有什么更好的解决方案呢?这就用到了热修复技术。QQ团队的hotfix,后来发展成为RocooFix,GitHub地址: https://github.com/dodola/HotFix原理详细介绍官方文章:安卓App热补丁动态修复技术介绍阿里巴巴的AndFix

2016-06-29 12:06:54 8998

原创 AsyncQueryHandler异步操作数据库的使用和源码解析

一.AsyncQueryHandler的作用:异步的查询操作帮助类,它可以处理增删改查。当然也可以使用ContentProvider去操作数据库。这在数据量很小的时候是没有问题的,但是如果数据量大了,可能导致UI线程发生ANR事件。当然也可以写个Handler去做这些操作,只是每次使用ContentProvider时都要再写个Handler,必然降低了效率。因此API提供了一个操作数据库的通用方法。它提供:startInsert,startDelete,startUpdate,startQuery这四个操

2016-06-28 17:35:15 4935

原创 Android中asset文件夹和raw文件夹

res/raw和assets的相同点:两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。assets和res/raw工程目录下都可以放一些小于1M的文件(2.3版本以前要求,否则将不能读出数据。),这些文件将被打包到APK中应用使用。assets目录下的文件将不做任何处理被打包,,如果你的资源很大,例如视频等等,应该单独存储在文件系统中。res/raw和assets的不同点:1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filena

2016-06-27 22:12:33 5506

原创 设计模式系列(四)建造者模式Builder

建造者模式将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。Builder:为创建Product对象的各个部件指定抽象接口。ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。Director:构造一个使用Builer接口的对象。Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,以及将这些部件装配成最终产品的接口

2016-06-26 14:51:41 3198 2

原创 Activity启动过程源码分析

老罗的Android系统源码分析讲的很不错,网上有很不同层面多源码分析。了解细节,还是自己看源码最直接。个人并没有透彻的研究过Android系统,这一系列的博客就当是读Android源码笔记了。有不对的地方还请多指教。startActivity方法context调用startActivity()实际是调用了ContextImpl的startActivity()方法, @Override public void startActivity(Intent intent, Bundle opt

2016-06-26 09:10:21 4168 3

原创 Android的各种Drawable详解

android内置了如下几种Drawable类型:ColorDrawable、GradientDrawable、BitmapDrawable、 NinePatchDrawable、InsetDrawable、ClipDrawable、ScaleDrawable、 RotateDrawable、AnimationDrawable、LayerDrawable、LevelListDrawable、 StateListDrawable、TransitionDrawableShapeDrawable。 An

2016-06-25 11:42:38 6414

原创 JAVA并发编程(一)JAVA线程池的使用

Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务

2016-06-24 10:20:56 2194

原创 Android屏幕适配

一、一些基本概念1、长度(真实长度):英寸、inch2、分辨率:density 每英寸像素数 dpi(密度)3、像素:px4、dip的公式:px /dip=dpi/160 所以 dip 类似于英寸、长度(dp=dip,sp类似于dip) dip=160*inchdip= 160/dpi * px当dip一定时,dpi 越大,px就越大5、广义分辨率=长px*宽px

2016-06-23 22:41:26 4360 5

原创 算法系列(十)堆实现优先队列

堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2]即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]称为小顶堆。由上述性质可知大顶堆的堆顶的关键字肯定是所有关键字

2016-06-22 15:16:06 3533

原创 Android差分升级原理和实现方式

增量升级的原理很简单,即首先将应用的旧版本Apk与新版本Apk做差分,得到更新的部分的补丁,例如旧版本的APK有20M,新版的有21M,更新的部分则可能只有1M左右,这里需要说明的是,得到的差分包大小并不是简单的相减,因为需要包含一些上下文相关的东西,使用差分升级的好处显而易见,那么你不需要下载完整的21M文件,只需要下载更新部分就可以,而更新部分的差分包很小,可以很大程度上减少流量的损失。bsdiff oldfile newfile patchfilebspatch oldfile newfile p

2016-06-21 21:08:10 24296 1

原创 Android的布局复用与优化

在布局优化中,Android的官方提到了这三种布局<include />、<merge />、<ViewStub />,并介绍了这三种布局各有的优势,下面也是简单说一下怎么使用.1、布局重用<include />1)<include />标签可以使用单独的layout属性,这个也是必须使用的。2)标签若指定了ID属性,而你的layout也定义了ID,则你的layout的ID会被覆盖3)在include标签中所有的android:layout_*都是有效的,前提是必须要写layout_width和la

2016-06-20 23:28:43 5519

原创 JUnit单元测试

JUnit 为基本类型和对象以及数组(基本类型或对象)提供了重载的断言方法。参数的顺序是期望值和实际值。可选的第一个值是错误情况的消息。有一个略微不同的断言是 assertThat 它需要的参数是一个可选的失败消息,实际返回值和一个 Matcher 对象。值得注意的是,预期的和实际的是相反的相比其他断言方法。Assume直译为假设,是JUnit提供的一套用于判断测试用例的入参是否有业务含义的工具,如果入参不符合预期时会抛出AssumptionViolatedException,默认的BlockJUnit4

2016-06-19 15:30:50 3008 2

原创 Android apk打包过程

android打包过程,下面这张图取自Android开发权威指南,非常清晰。整个过程使用的工具有名称 功能介绍 在操作系统中的路径aapt Android资源打包工具 ${ANDROID_SDK_HOME}/platform-tools/apptaidl Android接口描述语言转化为.java文件的工具 ${ANDROID_SDK_HOME}/platform-tools/aidljavac Java Compiler ${JDK_HOME}/javac或/usr/bin/javacdex

2016-06-18 22:57:07 5713

原创 android Cursor的自动管理方式

新手在使用数据库的时候,很容易忘记关闭Cursor,造成严重内存泄漏。有什么好的方法解决这个问题呢?除了自己管理Cursor,有什么办法把Cursor交给系统管理,而不需要自己主动close呢?manageQuery可以为你维护这个cursor。在你退出activity时为你自动关闭。 The method managedQuery(Uri, String[], String, String[], String) from the type Activity is deprecated。android

2016-06-17 21:43:39 6821

原创 Java编译时注解自动生成代码

在开始之前,我们首先申明一个非常重要的问题:我们并不讨论那些在运行时(Runtime)通过反射机制运行处理的注解,而是讨论在编译时(Compile time)处理的注解。注解处理器是一个在javac中的,用来编译时扫描和处理的注解的工具。可以为特定的注解,注册自己的注解处理器。一个注解的注解处理器,以Java代码(或者编译过的字节码)作为输入,生成文件(通常是.java文件)作为输出。可以生成Java代码,这些生成的Java代码是在生成的.java文件中,所以不能修改已经存在的Java类,例如向已有的类中

2016-06-16 21:31:11 13313 12

原创 JAVA之代码混淆proguard

官方网站用法http://proguard.sourceforge.net/index.html#/manual/examples.htmlproguard主要三部分功能缩减代码、优化代码、混淆代码。三部分功能都可以在配置文件里配置不启用此功能。#Shrink Options#不缩减代码-dontshrink#Optimization Options#优化代

2016-06-15 23:03:14 4375

原创 设计模式系列(三)工厂模式

工厂模式分类简单工厂模式(simple factory):类的创建模式,又叫静态工厂方法(static factory method)模式。简单工厂模式就是由一个工厂类根据传入的参数决定创建哪一种的产品类。工厂方法模式(Factory Method):一抽象产品类派生出多个具体产品类;一抽象工厂类派生出多个具体工厂类;每个具体工厂类只能创建一个具体产品类的实例。即定义一个创建对象的接口

2016-06-13 21:42:02 2653

原创 Android签名与风险分析

在Android 系统中,所有安装到系统的应用程序都必有一个数字证书,这个数字证书就是这个应用的签名。此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个 permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应 用程序才能取得该权限。这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。的protectionLevel为signature,那么就只有那些跟该permissi

2016-06-13 19:21:12 4498

原创 ListView注意的问题和源码解析(上)

ListView中涉及的设计模式ListView源码分析,和常见的问题分析设置没有数据时显示的空布局显示失败listView中多种类型布局使用OnItemClickListener中获取获取点击的item数据

2016-06-13 18:04:50 2427

原创 CPU概念和调度算法

1、物理CPU、逻辑CPU、CPU核数(1) 一个物理CPU上有多个CPU核,如果采用了intel的超线程技术(HT), 就会再多出一倍的cpu核出来(2)一般情况下,逻辑cpu数=物理CPU*cpu核数(3)如果采用了超线程技术,则正常逻辑cpu数=物理CPU*cpu核数*2top看到的cpu个数以及java中的Runtime.getRuntime().availableProcessors()获得到的都是逻辑cpu数。top看到的cpu个数以及java中的Runtime.getRuntime

2016-06-12 09:18:03 5546 3

原创 Android WebView问题汇总以及解决方法

Android WebView常见问题解决方案汇总:1、Android webview背景设置为透明无效webview是一个使用方便、功能强大的控件,但由于webview的背景颜色默认是白色,在一些场合下会显得很突兀(比如背景是黑色)。此时就想到了要把webview的背景设置为透明,这样就可以与其背景融为一体。在2.X的平台下,一般设置webview背景为透明的方法如下:

2016-06-11 21:46:22 8673

翻译 android开源图表库MPAndroidChart文档翻译(下)

MPAndroidChart 是 Android 系统上一款开源的图表库。目前提供线图和饼图,支持选择、缩放和拖放。android开源图表库MPAndroidChar的githu地址:https://github.com/PhilJay/MPAndroidChart在 android开源图表库MPAndroidChart文档翻译(中) 介绍了设置数据,设置颜色,轴的格式化,图例,动态修改数据。这篇文章继续翻译MPAndroidChart文档剩余内容。

2016-06-11 16:32:58 4961

原创 Fragment和Activity生命周期以及横竖屏切换对生命周期的影响

Fragment生命周期图解,fragment和activity生命周期对比1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏

2016-06-11 10:04:37 5177

原创 算法系列(九)平衡二叉查找树AVL树

在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。一棵AVL树是其每个节点的左子树和右子树的高度最多差1的二叉查找树。高度为 h 的 AVL 树,节点数 N 最多2^h − 1; 最少N(h)=N(h− 1) +N(h− 2) + 1。

2016-06-10 18:27:01 3544

翻译 android开源图表库MPAndroidChart文档翻译(中)

在 android开源图表库MPAndroidChart文档翻译(上) 中,介绍了mpandroidchart的创建,回调方法,还有轴。这篇文章继续翻译剩余内容。MPAndroidChart数据显示,统一的数据的格式化,X轴上的数据格式化,Y轴上的数据格式化。具体图表设置

2016-06-09 21:12:24 8901 1

翻译 android开源图表库MPAndroidChart文档翻译(上)

MPAndroidChart 是 Android 系统上一款开源的图表库。目前提供线图和饼图,支持选择、缩放和拖放。android开源图表库MPAndroidChar的githu地址:https://github.com/PhilJay/MPAndroidChart文档地址:https://github.com/PhilJay/MPAndroidChart/wikiAPI地址:https://jitpack.io/com/github/PhilJay/MPAndroidChart/v2.2.5/ja

2016-06-09 12:19:44 18031 15

原创 算法系列(八)数据结构之二叉查找树

在算法系列(七)数据结构之树的基本结构和二叉树的遍历 中介绍了基本的树结构,二叉树的实现和遍历。这篇文章重点学习一下二叉查找树。概述二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree)二叉搜索树。二叉查找树(BST)是二叉树的一个重要的应用,它在二叉树的基础上加上了这样的一个性质:对于树中的每一个节点来说,如果有左儿子的话

2016-06-09 01:03:14 3534

原创 设计模式系列(二)原型模式

在设计模式系列(一)单例模式 中详细介绍了单例设计模式,下面一起来看一下原型模式。一、概述原型模式是一种创建型设计模式,它通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的。原型模式多用于创建复杂的或者耗时的实例, 因为这种情况下,复制一个已经存在的实例可以使程序运行更高效,或者创建值相等,只是命名不一样的同类数据。二、

2016-06-08 00:35:15 2545

翻译 gson用户指南(下)

上篇文章gson用户指南翻译到了10、序列化和反序列化有任意类型对象的collection,我们继续11、内置的序列化器和反序列化器Gson内置的常用的默认序列化器和反序列化器的类可能不合适有时候默认表示不是你想要的。通常情况下在处理库类(DateTime等)会遇到这种情况。Gson允许注册你的自定义的序列化器和反序列化器。主要需要定义两个部分:Json序列化器:自定义对象的序列化Json反序列化器:为一个类型自定义反序列化

2016-06-07 13:32:02 1823

原创 算法系列(七)数据结构之树的基本结构和二叉树的遍历

一、概述在算法系列(六)数据结构之表队列和栈 一文中介绍了数据结构中的基本线性数据结构。对于大量的数据,链表访问时间太慢,而数组插入删除时间太慢。我们讨论一下数据结构树。 树结构大部分操作平均运行时间都为O(logN)二、树的定义树是由n(n>=1)个有限节点组成一个具有层次关系的集合。每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根

2016-06-06 22:55:21 3793

翻译 gson用户指南(上)

一、官方地址https://github.com/google/gson/blob/master/UserGuide.md#TOC-InstanceCreator-for-a-Parameterized-Typeapi地址http://www.javadoc.io/doc/com.google.code.gson/gson/2.6.2二、概述gson是一个用来将JAVA对象

2016-06-06 18:59:03 2307

原创 有效避免OOM--合理使用软引用和弱引用

在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用

2016-06-05 23:17:02 6395

原创 设计模式系列(一)单例模式

一、简单介绍单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。《设计模式》书中对单例模式动机的介绍对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Win

2016-06-05 11:00:42 6860 1

原创 算法系列(六)数据结构之表队列和栈

在http://blog.csdn.net/robertcpp/article/details/51559333一文中,我们讲了排序,这一章来介绍一下基本数据结构:表、队列、栈和它们的简单实现一、表ADT1、数组实现顺序表通过对数组操作,来直接对表进行增删查改操作,这种线性表查找某个位置的元素花费的时间为O(1),但是插入删除元素花费的时间为O(n),如果对表的操作更多的是访问操作,那

2016-06-04 07:50:41 3327 2

Android内核

本书详细分析了Android内核的内部机制,包括窗口管理系统、Activity管理系统、输入法框架、编译系统等,为Android内核定制及高级应用程序开发提供技术参考。

2016-06-01

数据结构与算法分析_Java语言描述

“数据结构”是计算机专业的基础与核心课程之一,Java是现今一种热门的语言。本书在编写过程中特别考虑到了面向对象程序设计(OOP)的思想与Java语言的特性。它不是从基于另一种程序设计语言的数据结构教材简单地“改编”而来的,因此在数据结构的实现上更加“地道”地运用了Java语言,并且自始至终强调以面向对象的方式来思考、分析和解决问题。

2016-06-01

精通spring3电子版

本书是关于Spring 的权威教程,是Java/Java EE开发者必备的参考书。本书详尽、系统地介绍了Java EE的基础知识、Spring 的各种功能,以及Spring 的高级使用技巧和最佳实践。

2016-06-01

Android反编译

一键反编译andorid源码

2016-05-27

Android夜间护眼模式源码

Android夜间护眼模式源代码,可调节屏幕整体的亮度跟颜色。

2015-01-06

VC++使用ADO在数据库中访问记录

使用ado访问Access数据库。比较基本,适合初学者。

2012-04-22

MFC记事本vc6.0下开发

MFC下记事本程序,有一丁点BUG,偶尔会有乱码。功能很多,字体设置,背景颜色,状态栏也是自己设置的,同时还可以托盘

2011-08-29

MFC下udp网络聊天小程序

VC6.0下MFC编程,基于UDP的网络聊天程序

2011-08-28

空空如也

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

TA关注的人

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