自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

David-Kuper的专栏

只有良好的设计规范和新颖的创意才能诞生出伟大的作品

  • 博客(58)
  • 资源 (1)
  • 收藏
  • 关注

原创 AOP之@AspectJ技术原理详解

AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

2017-06-14 22:35:32 26356 1

原创 PhotoView大图绘制——硬件加速限制

方案一关闭硬件加速方案二通过OpenGL的 GLES类获取硬件加速的最大限制值然后再对将方案三分块显示大图Bitmap最终实施方案二最近在做PhotoView图片的效果定制时,在加载展示图片情境下,统一把图片按照屏幕宽度作为固定值,计算宽高的缩放比然后对Bitmap进行伸缩,这样可以避免一般情况下的大图加载产生——OOM和trying to draw too large(xxxbytes) b

2017-06-14 20:10:49 1208

原创 Picasso使用Target无法回调的分析与解决

在加载图片的场景中,有时需要异步拿到Bitmap做一些操作:bitmap预热、bitmap裁剪等,当加载成功的时候通过回调的形式来获取Bitmap,然后进行处理。Picasso提供了一种回调的方式获取Bitmap。客户端实现Target接口即可在加载成功的时候通过回调的方式返回bitmap。

2017-06-14 19:44:49 3126 1

原创 Android大图绘制——硬件加速限制分析与方案

最近在做PhotoView图片的效果定制时,在加载展示图片情境下,统一把图片按照屏幕宽度作为固定值,计算宽高的缩放比然后对Bitmap进行伸缩,这样可以避免一般情况下的大图加载产生——OOM和trying to draw too large(xxxbytes) bitmap的问题。 当即便这样,也还是会有加载的图片尺寸超过限制的时候,就经常会看到这个warning,图片显示不出来:Bitmap t

2017-04-18 19:41:12 3278 1

原创 Android——带你从ADB命令行查看Task任务栈的管理方式

一、概念1、TaskTask是指将相关的Activity组合到一起,以Activity Stack的方式进行管理。从用户体验上讲,一个“应用程序”就是一个Task(默认情况),但是从根本上讲,一个Task是可以有一个或多个Android Application组成的。 Task表示一个任务,每一个Task 会有一个ID作为唯一标识。一个进程(程序)有一个默认的task a

2017-03-26 17:59:46 8735 4

转载 git如何配置多个ssh-key

一生成一个公司用的SSH-Key二生成一个github用的SSH-Key三添加私钥四修改配置文件五目录结构六测试我们在日常工作中会遇到公司有个git,还有些自己的一些项目放在github上。这样就导致我们要配置不同的ssh-key对应不同的环境。下面我们来看看具体的操作:一、生成一个公司用的SSH-Key $ ssh-keygen -t rsa -C “youremail@yourco

2017-03-14 19:48:42 824

原创 Android基础——控件的混合生命周期

一、Activity下的Fragment生命周期Android官方给出:基本情况下Activity与Fragment的生命周期对应关系如下图: 图1.0 静态布局情况下fragment与Activity的生命周期对应图 这个生命周期的严格对应关系成立条件为:fragment通过静态布局的方式插入到Activity的布局中。但是通过FragmentManager动态管理的时候就有些许差别了。

2017-03-09 22:11:44 1810 1

原创 Android文件操作 —— 6.0之后文件操作

今天做一个需求,需要在SD卡创建公共文件夹,以前也做过,创建SD卡文件夹的代码很简单。但是却出现了问题,在6.0版本之后都不能创建,最后查了文档发现问题所在,就记录一下(很久没有做文件操作相关的功能,现在都7.0了,out太多!)。1、权限声明<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2017-03-05 02:04:54 4436

原创 Java基础——异常解析

一、为什么要有异常 (1)为了协助排查程序出现的问题,上报错误日志。 (2)为了使出现错误的时候恢复正常。 (3)为了能够给用户一个提示。二、异常的层次结构 三、异常类别1、按照是否是编译期间检查分类(1)可检查异常(编译期异常): 编译器要求强制检查的异常,一般来说都会有提示编译不通过。要么处理它,要么try..catch它。Excepti

2017-03-03 18:17:07 330

原创 Java基础知识——容器浅析

容器类图结构容器简介CollectionListSetQueueMapIterableIteratorComparableComparator容器类图结构 容器简介Collection: 一个元素的序列,这些元素都服从一条或多条规则。其中List必须按照插入的顺序保存元素、Set不能有重复的元素、Queue按照排队规则来确定对象的产生顺序(通常也是和插入顺序

2017-03-03 15:55:54 600

原创 Android——如何优雅的维护最前台的Activity实例

在Android开发过程中,我们有时候需要获取当前的Activity实例,比如弹出Dialog操作,所以维护一个当前显示的Activity是比较好的方式。关于如何实现由很多种思路,这其中有的简单,有的复杂,这里简单总结一下几种方式。反射我们可以像下面这样,通过反射来获取一个Activity的引用。 1. 获取ActivityThread中所有的ActivityRecord 2. 从Acti

2017-03-01 15:59:16 1416

转载 聊聊同步、异步、阻塞与非阻塞

[TOC] 近来遇到了一些常见的概念,尤其是网络编程方面的概念,如:阻塞、非阻塞、异步I/O等等,对于这些概念自己也没有太清晰的认识,只是很模糊的概念,说了解吧也了解,但是要让自己准确的描述概念方面的具体细节,却说的不那么准确,这也是自己在这几个方面也没有细细考究过的原因吧。经过看了些这几个概念的资料,发现同步、异步、阻塞、非阻塞的概念其实也并不难以理解,在此写下此文,欢迎拍砖,希望多多交流。一、

2017-02-09 15:56:27 688

原创 Android自定义View——绘制一个会动的时钟

绘制时钟的时候将时钟拆分为外圆、刻度、指针三个组成部分,使得绘制的流程变得清晰,便于代码结构管理和修改;在绘制图形的时候进行坐标系的变换以简化计算复杂度。

2017-01-15 23:21:44 2084

原创 Java泛型(二)——使用Gson解析复杂的泛型嵌套泛型数据结构

Gson是由Google自家出来的Json解析库,使用起来兼容性方面当然会有很多优势,而且解析Json数据也很方便,掌握了Gson的一些基本使用之后就可以使用它解析很多复杂的Json数据了。但当我们要解析一个复杂的数据结构时,比如说List<**CardBean<*E*>**>这种,泛型之中还有泛型的数组结构,就比较麻烦了。下面我会给出一种方案,在此之前我还是先简单的介绍一下Gson的一些东西,大神请直接第二节

2016-11-15 17:37:02 18845 3

原创 Java泛型(一)——你所不知道的那些泛型背后

一泛型1编译期确定类型安全泛型Generics2参数化类型与原始类型的兼容性3类型擦除4泛型的定义与使用Java泛型(一)——泛型的定义与使用 Java泛型(二)——使用Gson解析嵌套泛型数组一、泛型1、编译期确定类型安全——泛型(Generics)泛型是提供给Javac编译器使用的。可以限定集合中输入的类型,让编译器在编译期间避免原始程序的非法输入,编译器编译带类型说明的集合时会去掉

2016-11-15 16:07:01 1946

原创 Android Fragment使用问题集结

1、FragmentManager问题问题描述:使用FragmentManager管理Fragment的时候,如果调用FragmentTransaction的replace方法(实际上是先调用add()然后再调用remove()),那么Fragment就会被销毁然后重新创建。 这样导致几个问题:1、Fragment重新实例化,里面的状态无法保存。 2、网络应用的情况下,Fragment重新实例

2016-11-06 21:48:31 588

原创 ListView中使用type需要注意的东西 java.lang.ArrayIndexOutOfBoundsException: length=2; index=2 addScrapView

Bug示例10-21 20:18:16.231: E/AndroidRuntime(4475): java.lang.ArrayIndexOutOfBoundsException: length=3; index=310-21 20:18:16.231: E/AndroidRuntime(4475): at android.widget.AbsListView$RecycleBin.add

2016-11-03 19:06:32 1264

原创 Android学习笔记——Handler消息分发

Handler 消息分发Handler事件分发机制是 基于生产者/消费者模型,使用Linux下的pipe(管道)实现的,读取和写入相互协调实现等待/通知。Handler机制是用于处理线程间消息分发的。主要角色:Handler(事件处理)、MessageQueue(消息队列)、Looper(消息循环)。 一个线程下可以有多个Handle,但只能拥有一个MessageQueue和一个L

2016-07-23 15:48:24 848

原创 Android学习笔记——触摸事件分发

Android 触摸事件分发机制Android触摸事件分为三个过程:分发、截获、处理。截获是ViewGroup独有的,可以截断事件的分发过程, 处理是View独有的,所有处理事件都将试图看成一个普通的View(即使它是一个ViewGroup)。 正常分发顺序:DispatchTouchEvent()——> onInterceptTouchEvent()——> onTouch()——> onTouch

2016-07-23 15:44:51 658

原创 android permission——关于权限你需要知道的事

引言有时候我们使用权限的时候,会发现同属于一个权限组的权限的请求描述符都是一样的。而且当你同意了改组中某一个权限的时候,同组内其他权限就不会再次提示了,默认同意。同理,我们自定义权限的时候,也可以按照这样的方式,将一些同类的权限放在一个组中,用户授权是以组的形式,他们并不能看到具体权限的细节,这样可以在避免用户进行多次许可的坏体验,程序编写也更加方便。一 权限分类按照权限来源分类:系统原有权限 :

2016-07-11 17:45:18 5386

原创 图像相关——DPI、PPI、像素、屏幕密度等关系与解释

今天查了一下有关图像分辨率,设备显示分辨率,以及其他的一些相关概念。之前一直没弄懂,在手机、电脑设备上的分辨率与摄影机上面的分辨率有什么不同,还有DPI、PPI又是什么。今天查了之后大概有了一些了解,给大家简单分享一下,如果要看一些详细的文章,下面还附有链接

2016-07-05 17:46:21 11498

原创 Android 基于AOP监控之——AspectJ使用指南

AspectJ的使用核心就是它的编译器,它就做了一件事,将AspectJ的代码在编译期插入目标程序当中,运行时跟在其它地方没什么两样,因此要使用它最关键的就是使用它的编译器去编译代码ajc。ajc会构建目标程序与AspectJ代码的联系,在编译期将AspectJ代码插入被切出的PointCut中,已达到AOP的目的。因此,无论在什么IDE上(如果使用命令行就可以直接使用ajc编译了),问题就是让IDE使

2016-05-27 22:01:34 13337 13

原创 Android基于AOP的非侵入式监控之——AspectJ实战

本博文的目的不是详细的介绍AspectJ的细节,而是最近项目用到了AspectJ,因此对其作了一些使用和重要概念上的总结。相信很多做过Web的同学对[AspectJ](https://eclipse.org/aspectj/doc/next/progguide/starting.html)都不陌生,Spring的AOP就是基于它而来的。如果说平常我们随便写写程序的时候,基本也不会用到它,需要调试的话无非就是多加一个

2016-05-24 10:45:15 21160 6

原创 Android框架设计模式(五)——Singleton Method

单例模式就是在整个全局中(无论是单线程还是多线程),该对象只存在一个实例,而且只应该存在一个实例,没有副本(副本的制作需要花时间和空间资源)。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,同时该对象需要协调系统整体的行为,单例模式是最好的解决方案。单例模式相当于只有一个

2016-04-05 00:04:26 2928

原创 Android框架设计模式(四)——Adapter Method

我们使用适配器的本质原因是:当我们的系统已经确定了一个标准,但已有的资源与现有标准不兼容,而且又无法或者不便修改这个标准的时候,就需要用适配器来使得不兼容的被使用方包装成已有的标准供已有的系统使用。

2016-04-04 00:31:40 2535 1

原创 C++ 指针与const的组合复习

一const变量二const与指针1指向常量的指针2常指针3指向常量的常指针三总结因为最近在笔试的时候遇到C++中的指针使用,头疼的很。今天刚好又重新温固了一下C++的指针和const的组合,现在将看到的知识重新梳理一下。一、const变量我们知道,在C++中,const是经常使用到的一个关键字。因为使用它可以提高系统的安全性和程序员编程的可靠性。被const修饰的符号说明是常量,即不可变

2016-03-25 20:59:41 787

原创 C语言指针与数组易混淆知识点(一)

一指针与数组二指针与函数三指针数组数组指针指向指针的指针四程序陷阱一、指针与数组指针:指针本身也是一个变量,它的内容是指向的内容的地址。指针同样有类型的区分,char 的指针只能指向char型数据,int 指针指向int型数据。但是指针所占内存单元的大小(即其内容)是跟操作系统的地址位数有关,比如32位地址的系统,那么指针所占的内存单元就是4个字节,16位就是2个字节,因此,指针的类型只是限

2016-03-25 15:59:17 9423 3

原创 Android框架设计模式(三)——Observer Method

在介绍观察者模式之前,先补充两个概念:IOC(控制反转)、DIP(依赖倒置)。依赖倒置(控制反转),是框架设计的核心,因为有了它们会产生框架,框架的核心就是把【不变】的留在框架层次,把【变化】的留在应用层次,然后两个层次之间通过接口来实现沟通,降低耦合。它们两者本质是同样的,只是一个是从原则上面描述,一个是从方式上面描述。

2016-03-23 21:03:07 5077 2

原创 Android:Activity——生命周期深入详解

一、生命周期全面分析Android活动默认运行在当前进程所拥有的栈中,前台可见的活动则在活动栈的最顶部。其他后台活动则在栈的里面,在正常的情况下(内存充足)其他的活动并没有被回收或者杀死,它们仍然存在于栈中保持着原来的状态。当前面的活动退出后,后面的活动就会搬到前台使得被用户可见。如果在非正常情况下(内存紧张、按下Home键后右启动其他应用)那么栈内的非前台Activity就可能被回收,但是当我们返

2016-03-23 13:34:08 26192 3

原创 Android:windowSoftInputMethod软键盘弹出的问题浅析

一、浅析很多时候在一些需要输入的界面上,我们需要呼出软键盘来打字。Android中会在AndroidMainfest.xml文件的 < activity />节点使用 android:windowSoftInputMode=”XXX”属性来设定呼出软键盘的属性。 下面就对一些属性做一个简单的列表说明。“stateUnspecified” 软键盘的状态(是否它是隐藏或可见)没有被指定。系统

2016-03-22 23:47:44 1629 1

原创 Android框架设计模式(二)——(抽象)工厂模式

所有的工厂类都是一个目的:降低具体产品与调用者(比如说客户端)的耦合程度。对调用者隐藏产品的构造和变化(包括类名等)

2016-03-12 00:45:37 1422

原创 Android框架设计模式(一)——Template Methods

这两天开始学习高焕堂老师的Android的设计模式,感觉他的讲解非常透彻,把Android框架和设计模式结合讲解,在Android这个大而全的体系框架中,从整体上把握设计模式的应用,感觉对Android框架设计的理解加深了许多,希望以后能够同步学习进度,记录和分享学习心得。 我个人的理解,说到模式就离不开框架,设计模式和框架就是虚实的两面,就像武功心法和招式的关系一样。设计模式就类似于心法(虚

2016-03-09 13:23:43 1345

原创 Top-N Recommendation——基于电影(Item)的推荐

无论是在实体商店还是在网络上,都会有Top-N推荐的情况。基于客户或者基于商品做出推荐。本实验基于Movielens的电影数据集,对电影做出Top-N 推荐。主要目的是基于Item-Based的思想来进行Top-10的相关电影推荐。二、Methodology本实验基于Item-Based 的思路,计算电影

2016-03-04 12:33:21 4603 2

原创 Top-N Recommendation——基于用户的推荐实验

无论是在实体商店还是在网络上,都会有Top-N推荐的情况。基于客户或者基于商品做出推荐。本实验基于Movielens、Ratings的电影数据集,对用户做出Top-N 推荐。主要目的是基于User-Based的思想来进行Top-10的相关电影推荐。二、Methodology本实验基于

2016-03-04 12:16:54 12007

原创 Rating Prediction——评分预测小结

现在,各大网络购物平台的购物都会有评分机制,商家要给用户推荐其满意的商品,就需要了解用户的行为,基于用户行为进行分析,从而预测并给用户推荐适合的商品,提高商品转化率。用户行为多种多样,本实验是基于用户评分的行为,来预测用户未来的评分,一次作为给用户推荐的因素之一。

2016-03-04 11:51:05 17711 5

原创 Android兼容包Support v4.v7.v13区别与应用场景

引言Google为了在较低版本中兼容高版本的控件和布局以及相关的一些主题(Theme),推出了兼容包,方便开发人员在较低版本中使用高版本的效果。因此,我们经常会看到v4,v7,v13,v14,v17等数字以及带有Support的包,下面我们就来理清这些数字所代表的含义,了解它们的区别和应用场景,便于以后编程的时候选取合适的兼容包。

2016-03-04 10:59:09 7161

原创 Genymotion+VirtualBox详解—目录结构,路径更改,重新加载已存在的模拟器

引言Genymotion默认的安装文件夹是在系统盘里,如果我们在安装的时候没有将他设置到其他盘,以后如果模拟器数量增加的话,那么将会占据大量的系统盘内存,导致操作系统响应缓慢。如果想要更换模拟器路径,最先想到的是暴力卸载重装,然后在安装向导的时候选择安装路径,这种方法有效,但是不可行。每次更换路径都要卸载重装重下载,同时原来模拟器上的配置信息和安装的软件都丢失了,谁受得了。这里有第二种方案,可以避免

2016-02-21 15:08:57 13024 1

转载 Android 开源项目分类汇总

里面囊括了:个性化控件、各种工具库、软件开发测试库、优秀项目、优秀个人软体等海量的开源项目。可以帮助大家简化开发,快速构建健壮稳定的APP,而不用自己重复造轮子。

2016-02-19 12:20:07 2082

原创 android —— 简易仿ZAKER手机阅读APP

一、引言      我手机上自带了一个ZAKER的新闻阅读APP,用起来感觉它的界面很简洁,特别是阅读的界面与众不同,很有新意。于是就自己模仿着做了一遍大体的框架和模块,也添加了一点自己的布局进去。仿照了它大体的模块布局:订阅、娱乐频道、社区。        所有的文件、图片都是加载本地资源。所有布局、控件都定义了MVC的适配器结构,所以有后台的话也可以自己接上去。

2016-02-05 17:13:15 1950

原创 Android Error —— 自定义控件FindViewById() 返回 Null

今天写android自定义控件的时候突然发现了一个问题,也不报错,实在蛋疼。后面发现是因为自定义控件构造函数使用不对,自定义构造函数有三个构造函数。        分别有1、2、3个参数。                   Class(Context);     普通构造函数,无法加载属性集(无法加载XML文件中定义的控件属性,导致无法从XML文件中初始化)。

2016-02-05 12:09:48 3536

通讯录管理系统

通讯录管理系统, 功能: 添加联系人 删除联系人 查询联系人 显示所有联系人 修改联系人 保存到文件当中

2014-10-10

空空如也

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

TA关注的人

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