- 博客(50)
- 资源 (17)
- 问答 (1)
- 收藏
- 关注
原创 Android性能优化详解
启动优化用户都希望点击应用图标后,应用能够快速地启动并响应用户操作。而随着业务逻辑的增加,要初始化的操作越来越多,尤其是第三方组件的初始化,而在应用启动时初始化会导致应用启动时间变长,因此,我们需要对启动性能(Launch-Time Performance)进行优化。启动时的状态应用会从冷启动(cold start)、热启动(warm start)、温启动(lukewarm start
2017-12-08 21:02:09
1007
原创 Glide v4详解
简介下载配置使用简单使用高级用法RequestOptionsTransitionOptionsGenerated APIRequestBuilderConfiguration使用技巧Glide的图片变换TransformationsGlide的过渡动画TransitionsGlide的缓存管理Caching简介Glide项目于2012年12
2017-10-12 20:43:25
11353
原创 Android权限管理详解
概述Android安全架构规定:默认情况下,任何应用都没有权限执行对其他应用、操作系统或用户有不利影响的任何操作。这包括读写用户的私有数据(如联系人或电子邮件等)、读写其他应用的文件、执行网络访问、使设备保持唤醒状态等等。 如果要使用这些受保护的设备功能,首先要在应用的清单文件(AndroidManifest.xml)中添加一个或多个 <uses-permission>标记: <manifest
2017-04-21 17:09:45
23404
翻译 Dagger2 User's Guide(翻译)
概述依赖注入(dependency injection)是一个对象为另一个对象提供依赖关系的技术手段。简单点说,就是一个对象(client)要依赖其它对象(services)才能完成工作,那么这个对象(client)就对其它对象(services)产生了依赖,而依赖注入就是把依赖(services)在需要的时候自动传给client,而不是client自己创建或者寻找services。也就是说客户对象
2017-03-30 16:07:14
3437
原创 Android软键盘输入详解
IM(Input Method): 输入法。是指通过键盘等输入设备输入 输入设备上没有 的字符的 方法/程序/处理器 。最开始是特指在拉丁字母键盘上输入CJK (Chinese, Japanese and Korean)文字的方法,现在一般将所有的输入语言的方式都叫输入法。 IME(Input Method Editor): 输入法编辑器。通常简作输入法。 IMF(input method
2017-01-22 17:53:26
5710
1
原创 Android时间处理详解
Android时间详解 Java Calendar详解 Java Date Greenwich:格林威治/格林尼治,是位于伦敦市中心东南部的一个区,1675国王查理二世在此建立了皇家格林尼治天文台,1851年御用天文学家艾里在天文台设置了中星仪并确定了格林威治子午线,1884年在美国华盛顿特区举行的国际本初子午线大会上正式将此线定之为经度的起点。
2016-08-25 12:14:17
6141
1
原创 MD风格之丰富多变Toolbar
一. 下载 compile 'com.android.support:design:23.4.0'二. 详解CoordinatorLayout继承自ViewGroup,实现了NestedScrollingParent接口,可以说是超级版FrameLayout。 CoordinatorLayout的用途主要有两个:作为最顶层的application decor或者chrome layout.
2016-07-22 15:58:40
1678
原创 Invalid double崩溃分析
Caused by: java.lang.NumberFormatException: Invalid double: "0,3" at java.lang.StringToReal.invalidReal(StringToReal.java:63) at java.lang.StringToReal.initialParse(StringToReal.java:164) at java.la
2016-06-18 14:58:22
6657
原创 RecyclerView之ItemDecoration详解
关于RecyclerView的ItemView装饰,之前一直用官方Demo的DividerItemDecoration,并没有认真地去理解ItemDecoration的用法,也没能体会到ItemDecoration的强大,直到要用到横向的RecyclerView,而且最左边的和最右边的Item要留出间隔(虽然clip结合padding可以实现),才认真地理解一下ItemDecoration。 Re
2016-05-20 16:11:39
15704
3
原创 Collections.sort()崩溃分析
对List排序一般采用两种方法:(1)实体类实现`Comparable<T>`接口,完成`compareTo(T o)`方法。(2)创建一个`Comparator<T>`的实现类,完成`compare(T o1, T o2)`方法,然后利用这个比较器对List进行排序。
2016-05-19 11:21:44
8794
原创 Glide使用详解(二)
BitmapPoolDalvik和ART都没有使用compacting garbage collector垃圾回收模式,这种模式中GC会遍历堆,同时把活跃对象移到相邻内存区域,让更大的内存块可以用在后续的分配中。因为安卓没有这种模式,就可能会出现被分配的对象分散在各处,对象之间只有很小的内存可用。如果应用试图分配一个大于邻近的闲置内存块空间的对象,就会导致OOM崩溃,即使总的空余内存空间大于要分配的
2016-04-17 15:01:59
8781
1
原创 Glide使用详解(一)
Glide使用 Glide使用教程 Glide详解 Android图片加载 一. 下载在build.gradle中添加依赖: compile 'com.github.bumptech.glide:glide:3.7.0'需要support-v4库的支持,如果你的项目没有support-v4库(项目默认已经添加了),还需要添加s
2016-04-12 12:25:23
167516
15
翻译 Glide之后台线程加载及缓存资源
后台线程加载及缓存为了使后台线程加载和处理媒体资源更容易,Glide新增了两个API:downloadOnly(int, int)into(int, int)Glide的downloadOnly(int, int)API允许你下载图片的字节流到磁盘中,以便你之后用到。你可以在UI线程中异步地使用downloadOnly()或者在后台线程中同步使用,但要注意,异步API需要一个Target作为参
2016-04-04 22:45:10
11778
2
翻译 Glide之Target
Glide不但可以把图片、视频剧照、GIF动画加载到View,还可以加载到自定义的Target实现中。Target就是使用Glide获取到资源之后资源作用的目标,我们通常是用Glide加载完资源后显示到ImageView中,这个ImageView就是目标。 Target架构的接口包括:com.bumptech.glide.manager.LifecycleListenercom.bumptec
2016-04-01 17:36:20
10396
1
翻译 Glide之GlideModule
GlideModule接口:为了延迟配置Glide(包括用GlideBuilder设置选项,为Glide注册ModelLoader) 所有的GlideModule实现类必须是public的,并且只拥有一个空的构造器,以便在Glide延迟初始化时,可以通过反射将它们实例化。注册ModuleLoader时可调用Glide的register(Class<T> modelClass, Class<Y> r
2016-03-31 15:13:49
17670
原创 Unable to add window崩溃分析
显示Dialog时,我们通常会将Activity实例传给Dialog,然后调用Dialog的show方法显示。但在一些情况下,比如说先通过异步网络请求请求数据,等拿到数据后再调用Dialog的show方法显示Dialog来告诉用户已经拿到数据了,但是,我们偶尔会发现发生这样的程序崩溃:android.view.WindowManager$BadTokenException: Unable to
2016-03-21 17:49:10
24257
3
原创 重学Java系列(一) -- static、final
static 修饰 类:static修饰类时,是指修饰内部类,也就是所说的静态内部类,普通外部类是不允许用static修饰的。非静态内部类可以直接访问外部类的成员变量和成员方法,即使是private的。实例化非静态内部类时要先实例化一个外部类对象outerObject,通过这个外部类的对象来实例化:NonStaticInner nonStaticInnerObject = outerObject.new NonStaticInner();非静态内部类将持有外部类对象的隐式引用,如果你用不到这个引用,那这个
2016-01-24 17:22:16
1283
原创 Android基于Bmob群聊功能的实现
Bmob算是国内做的比较好的做BaaS或MBaaS服务的公司了,官方写的IM的Demo目前可以实现登录注册、搜索添加好友、与好友进行文字图片音频位置对话功能,但感觉好友很多缺陷,比如说删除表中的数据时只能根据ID查找,没提供数据库事务操作的接口,IM没实现群聊的功能,有些API太少太局限,可能因为公司团队小吧,希望能越做越好。 回到正题,既然Bmob的IM没有实现群聊,那就自己实现,Bmob有一个
2016-01-20 15:41:34
5611
2
原创 Android仿QQ长按删除弹出框
废话不说,先看一下效果图: 对于列表来说,如果想操作某个列表项,一般会采用长按弹出菜单的形式,默认的上下文菜单比较难看,而QQ的上下文菜单就人性化多了,整个菜单给用户一种气泡弹出的感觉,而且会显示在手指按下的位置,而技术实现我是采用popupWindow和RecyclerView来实现,上面一个RecyclerView,下面一个小箭头ImageView。
2015-12-10 22:51:31
13883
24
原创 Bootstrap之侧边导航菜单(可折叠分组)
效果图: 源码:<!DOCTYPE html><html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device
2015-11-10 18:09:09
143204
1
原创 Android自定义ViewGroup工具类ViewDragHelper分析
ViewDragHelper,包含在android.support.v4.widget包中。View,Drag,Helper,字面意思很直观地表明了它是一个视图拖动辅助类,封装了View拖动所涉及的触屏事件检测、View属性更改以及接口回调等的实现。ViewDragHelper是为定制ViewGroup而封装的的实用工具类(utility class,是一个类定义了一组通用的、经常使用的方法),ViewDragHelper类提供了很多有用的操作和状态跟踪以便用户在父ViewGroup范围内对View进行拖动
2015-11-05 08:35:20
2217
原创 前端基础与CSS中的浮动
HTML元素分为五种:① 空内容元素(Void elements) 没有内容,也没有结束标签。 area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr② 原始文本元素(Raw text elements) 可以有文本内容。
2015-10-13 12:13:00
1261
原创 设计模式笔记(十一)--建造者模式、原型模式、单例模式
建造者模式(Builder Pattern)封装一个产品的构造过程,并允许按步骤构造。还有一个通俗的定义是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。简单点说,就是客户类想要创建结构或者逻辑特别复杂的产品对象时,让建造者帮忙构建产品,建造者负责产品各个部件的构建以及最终产品的组装。
2015-09-28 09:42:16
1229
原创 Tiles3.x框架使用
官网:http://tiles.apache.org/ Tiles,瓷砖,就像Windows8+的磁贴一样,多个瓷砖构成了整个UI页面。它是一个免费开源的模板框架,基于组合模式来简化UI界面的开发。对于复杂的网站来说,它可以简单优雅地结合MVC技术一起工作。配置: ①引入相应的依赖文件
2015-09-23 11:02:24
3528
原创 JavaScript总结(一)
JS数据类型:js究竟分为哪些类型是个比较蛋疼的问题,ECMAScript规范(JS遵循ECMA262规范)虽然总是统称为types,但有时也无法回避描述true、false、0-9这类数据时该用什么术语,如果非要分开,我觉得应该分为以下类型,原语类型/基本类型(Primitive Type):String、Boolean、Number、Undefined、Null。对象类型/引用类型(Object Type):Object。
2015-09-08 16:58:12
977
原创 Android Activity 启动模式和生命周期笔记
官方文档地址:http://developer.android.com/guide/components/tasks-and-back-stack.html 一个应用程序通常包含多个Activity,每个Activity被设计用来让用户执行特定的action,并且能够启动其它的Activity。比如,一个邮件应用中可能会包含一个用于展示邮件列表的Activity,...
2015-09-03 21:08:39
1250
原创 设计模式笔记(十)--小结
设计模式根据目的的不同可以分为创建型模式、结构型模式和行为型模式。创建型模式(Creational Pattern):为了灵活而高效地创建对象。包含:工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、创建者模式/建造者模式(Builder Pattern)、原型模式(Prototype Pattern)、单例模式(Singleton Pattern)。结构型模式(Structural Pattern):为了完美处理对象的
2015-08-29 22:35:54
866
原创 设计模式笔记(九)--状态模式、代理模式
状态模式(State Pattern)允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。简单点说,一个对象持有一个状态对象来表示自己现在的状态,当有行为(动作请求)时,该对象会委托给当前状态对象处理,因当前状态对象的不同会表现出不同的行为。所以它利用对象组合来引用不同的状态对象,在客户看来就像修改了对象一样。代理模式(Proxy Pattern)为另一个对象提供一个替身或占位符以控制对这个对象的访问。
2015-08-27 10:32:24
816
原创 设计模式笔记(八)--迭代器模式、组合模式
迭代器模式(Iterator Pattern)提供一个方法顺序访问一个聚合对象中的元素,而不暴露其内部的表示。组合模式(Composite Pattern)允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
2015-08-26 15:01:31
818
原创 设计模式笔记(七)--模板方法模式
模板方法模式(Template Method Pattern)在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。简单点说,超类的模板方法中定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。这样模板方法就控制并保护了算法,算法中的步骤可以由超类实现,也可以由各个子类根据自己的需要实现(声明为abstract)。
2015-08-25 17:23:37
640
原创 设计模式笔记(六)--适配器模式、外观模式
适配器模式(Adapter Pattern)将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。简单点说,就是利用适配器将不符合自己期望的接口转成自己想要的接口。对象适配器:
2015-08-25 16:16:21
701
原创 设计模式笔记(五)--命令模式
命令模式(Command Pattern)将请求封装成对象,以便使用不同的请求、队列或者日志 来参数化其他对象。命令模式也支持可撤销的操作。命令模式的目的就是让发出请求的对象和执行请求的对象解耦。
2015-08-21 16:48:57
560
原创 设计模式笔记(四)--工厂方法模式、抽象工厂模式
工厂模式(Factory Pattern) (1)简单工厂(Simple Factory)也许都注意到了,这里没有使用Pattern模式的字眼,因为简单工厂更像是一种编程习惯,而不是严格意义上的设计模式。先说一下客户类怎么使用:直接Pizza pizza = PizzaFactory.createPizza("cheese");就可以获得CheesePizza类型的披萨了。
2015-08-20 17:55:12
747
原创 设计模式笔记(三)--装饰者模式
装饰者模式(Decorator Pattern)动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。简单点说,装饰者可以装饰(也就是在原来功能的基础上再扩展其功能)被装饰者。一个被装饰者可以被多个装饰者装饰,或者被相同的装饰者装饰多次,是不是很灵活啊。而这就要求装饰者和被装饰者要有相同的父类型。
2015-08-18 09:35:15
632
原创 设计模式笔记(二)--策略模式、观察者模式
(1)策略模式(Strategy Pattern)定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用它的客户。简单点说,一个客户类/对象有很多功能策略,这些策略因为对象的不同有不同的算法实现,这时我们可以将策略抽象出来,用不同的策略实现类来实现,而客户类只持有策略接口,所以很方便传给客户类不同的策略实现。也许你会说,定义一个抽象类,不同的子类来实现你说的不同算法不就行了,但仔细想想,这些不同子类的某些算法实现是一样的,如果需求说要改变,那么所有的相关子类都要改,而且某些子
2015-08-17 15:46:12
836
原创 设计模式笔记(一)--设计原则
类/对象之间的关系:Generalization(泛化),Dependency(依赖),Association(关联),Aggregation(聚合),Composition(组合/合成)泛化,表示类之间是is-a关系,如类A继承了B类或实现了B接口,子类会继承父类的属性和方法。依赖,表示类之间是use-a关系,如该类A的方法中的参数是某个类B,类A和类B就是依赖关系(类B以局部变量、静态
2015-08-13 10:49:05
578
原创 Java中对List进行排序
java.util包中的List接口继承了Collection接口,用来存放对象集合,所以对这些对象进行排序的时候,要么让对象类自己实现同类对象的比较,要么借助比较器进行比较排序。 学生实体类,包含姓名和年龄属性,比较时先按姓名升序排序,姓名相同时按年龄升序排序。 第一种:对象类自己实现比较(实现comparable接口)public class S
2015-07-30 11:07:10
1523
原创 JPA注解之主键生成器策略
JPA主键生成器策略:①GenerationType.IDENTITY:由数据库的自增列提供主键值。只有插入记录后逐渐才会生成(像MySql中的auto_increment)。MySQL, SQL Server, DB2, Derby, Sybase, PostgreSQL。②GenerationType.SEQUENCE:由数据库的Sequence对象提供主键值。Oracle、P
2015-07-21 14:39:21
1389
翻译 Android WebView学习笔记
先看一下WebView的继承关系:WebViewextends AbsoluteLayoutimplements ViewTreeObserver.OnGlobalFocusChangeListener ViewGroup.OnHierarchyChangeListenerjava.lang.Object ↳ android.view.
2015-04-14 22:58:11
1754
ijkplayer so文件
2017-11-24
Android与服务器Json交互
2015-07-25
Android圆角ImageViewV2
2015-04-06
房屋租赁管理系统
2014-11-25
ListView中不显示HeaderView
2015-03-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人