- 博客(76)
- 资源 (3)
- 收藏
- 关注
原创 View工作流程
View的工作流程主要指measure,layout,draw这三大流程,即测量、布局和绘制。measure过程1、View的measure过程2、ViewGroup的measure过程使用measureChildren遍历调用所有子View的onMeasure方法layout过程layout的作用是ViewGroup用来确定子元素的位置,当ViewGroup的位置被确定后。它在onLayout中会
2016-10-05 14:22:38
389
转载 Java泛型
泛型的优点泛型应该说是一种高级的抽象,类型的参数化,加强程序的通用性;类型安全,防止ClasscastException;泛型化后,编译器会帮助我们进行类型推导,类型自动转化,消除强制类型转换,由编译器更安全地完成;大大增强容器类的通用性(说不定引入泛型初衷,就是为了更好的使用容器类)。泛型自底向上一般情况下,方法的参数只能为固定的类型(基本类型、特定的类型),没有通用性可言;把方法的
2016-09-26 03:26:37
408
转载 单例模式与静态变量的区别
单例的特点:保证某类只存在唯一实例。该类本身完成自身的初始化。获取该唯一实例的方式非常明确,可以通过该类本身定义的静态方法getInstance()获取该类的唯一实例引用。静态变量定义某类的实例引用特点:该类的实例引用的静态变量可定义在任何文档类当中。获取该类的实例引用的静态变量,可以通过定义该静态变量的类名通过点语法进行访问该引用。任何位置可以对该静态变量进行重新赋值。通过这两者方
2016-09-25 20:47:45
1484
转载 抽象类真的不能实例化么?
原理:抽象类其实是可以实例化的,但是他的实例化方式不是通过new方式来创建对象,而是通过父类的引用来指向子类的实例来间接地实现父类的实例化(因为子类要实例化前,一定会先实例化他的父类。这样创建了继承抽象类的子类的对象,也就把其父类(抽象类)给实例化了).
2016-09-25 01:45:24
1297
转载 HTTP缓存
众所周知,缓存是一种非常重要的东西,CPU缓存、磁盘缓存、图片缓存、HTTP缓存,尤其是在Android这种资源受限的平台,缓存可以发挥很大的作用。请求字段响应字段缓存控制流程相关阅读: Android网络请求心路历程 浏览器 HTTP 协议缓存机制详解
2016-08-24 17:26:18
440
原创 View滑动冲突处理
上一篇View事件分发介绍事件分发主要就是父子元素的争斗,所以自然而然的就产生两种处理方法,在父元素处理(外部拦截)、在子元素处理(内部拦截),其实就是事件处理的控制方不同。滑动冲突场景描述1、外部滑动方向与内部滑动方向不一致2、内外滑动方向一致这就要根据业务场景来处理何时哪个View该滑动。3、上面两种情况的结合典型场景,最外层SlideMenu,里面是ViewPager,ViewPager里面又
2016-08-21 23:10:34
399
原创 Android内存缓存和磁盘缓存的实现
内存缓存内存缓存是Android自带的LruCache,LruCache内部主要采用LinkedHashMap来实现,而LinkedHashMap天生自带缓存特性,可支持FIFO和LRU访问。LinkedHashMap的特点LinkedHashMap继承自HashMap,同时也继承了HashMap的数组+链表的实现,不过添加了以下功能:把所有的节点维护成一个双向循环链表accessOrder字段
2016-08-19 18:10:11
1177
原创 Android Universal-Image-Loader 解析
任务流图 任务流图中的每一步都有自己的接口(在图片底部)来负责这部分的任务。大部分接口(除了BitmapProcessor)都拥有默认的实现从左到右依次是BaseImageDowloader、UnlimitedDiscCache、BaseImageDecoder、LruMemoryCache、SimpleBitmapDisplayerImageDownloader接口public interf
2016-08-18 23:38:22
474
原创 Toolbar+DrawerLayout侧边导航
Android 5.x Theme 与 ToolBar 实战 Android ActionBar完全解析,使用官方推荐的最佳导航栏(上) Adding the App Bar 薄荷Toolbar(ActionBar)的适配方案 Android DrawerLayout 高仿QQ5.2双向侧滑菜单 Creating a Navigation DrawerHow do I use DrawerL
2016-08-12 01:02:36
465
原创 OkHttp-简介
WiKi:https://github.com/square/okhttp/wiki/Calls OfficialWebsite:http://square.github.io/okhttp/ Android OkHttp完全解析 是时候来了解OkHttp了 Android Https相关完全解析 当OkHttp遇到Https Android 一个改善的okHttp封装库
2016-08-11 23:02:53
528
原创 Volley
图解Volley1、总体设计图 2、请求流程图 相关阅读:官方简介基本用法RequestQueue queue = Volley.newRequestQueue(this);StringRequest stringRequest = new StringRequest("http://www.baidu.com", new Response.Listener<String>() {
2016-08-11 20:45:18
556
翻译 Android Universal-Image-Loader-简介
安装UIL1、添加依赖手动下载JAR包Gradlecompile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'2、Android Manifest<manifest> <!-- Include following permission if you load images from Internet -
2016-08-11 15:55:35
388
原创 Android进程间通信(IPC)
为什么要使用多进程?为了获得更大的内存(以前每个进程是16M);向其他应用获取数据(通讯录),ContentProvider天生支持进程间通信;多进程模式可以使用process标签开启多进程模式,Application、Activity、Service、BroadcastReceiver、ContentProvider都有此标签。两个进程如果ShareUID相同,且签名相同,就可以共享内存数据
2016-08-08 16:46:56
354
原创 View事件分发
简介1、View事件分发最重要的三个函数dispatchTouchEventonInterceptTouchEvent-此方法只有ViewGroup有onTouchEvent2、View层事件处理的伪代码public boolean dispatchOnTouchEvent(MotionEvent ev){ boolean consume = false; if(onInte
2016-08-08 16:04:13
267
原创 Android图片加载须知
图片尺寸过大获取图片大小、MIME BitmapFactory提供了多个解析方法(decodeByteArray, decodeFile, decodeResource,decodeStream等)用于从网络、文件、资源文件等中解析Bitmap对象。这些方法都可以传入BitmapFactory.Options对象来来设置解析时的参数,把Options对象的inJustDecodeBounds设为t
2016-08-07 02:48:16
366
原创 RecyclerView的使用
与ListView相比,同样具有item回收复用功能,RecyclerView把ViewHolder的实现封装了起来,使用时要实现自己的ViewHolder。首先,跟ListView一样,要定义一个数据适配器,这里要继承RecyclerView的内部抽象类,RecyclerView.Adapter< VH extends ViewHolder>,泛型参数为ViewHolder。数据适配器public
2016-08-06 02:03:19
999
原创 内存泄漏原因概览
1、静态变量导致内存泄漏Activity的Context或this被赋值给一个类的静态变量,因为静态变量时类变量,除非该类在虚拟机中被卸载,否则,Activity永远被强引用,不会被GC掉。2、属性动画导致的内存泄漏如果动画无限循环,且没有在onDestroy中退出动画,并且,此Activity的View被动画持有,View又持有Activity,最终Activity无法释放。解决方法是在,onDe
2016-08-05 22:06:43
1717
原创 Android文件上传
首先了解一下文件上传的原理,在CSDN上传一张图片 通过抓包工具来查看Http请求信息 采用POST方式传输,来看下它的Payload 它的格式如下: ——WebKitFormBoundaryaihAKBhFq3SEzil7 Content-Disposition: form-data; name=”file1”; filename=”PictureOnDisk.PNG” Con
2016-08-05 14:59:31
251
原创 Android性能优化
1、布局优化include布局引用已有视图merge标签合并布局管理器ViewStub视图延迟加载,在ViewStub调用inflate方法或设置visiable之前,它是不占用布局空间和系统资源的,只是一个占位符。加载视图之后,它就消失了,有加载后的布局替代。减少视图层级尽量多使用RelativeLayout,使视图变得扁平。总结尽量多使用RelativeLayout,不要使用绝对布局Absol
2016-08-05 14:23:39
415
原创 Java虚拟机--线程安全与锁优化
线程安全在Java中可以对各种操作共享数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容、线程对立。1)不可变用final修饰的基本变量、行为不会对自己的状态产生影响的对象(比如,把自己的状态设置为final的)、枚举类、java.lang.Nuncer的部分子类(Long,Double等的数值包装类)、BigInteger和BigDecimal等大数据类型。(AtomicInteger
2016-08-04 10:49:49
469
原创 Java虚拟机--内存模型与线程
0、内存模型内存模型,可以理解为特定操作协议下,对指定的内存或高速缓存进行读写访问的过程抽象。C/C++直接使用物理硬件和操作系统的内存模型,会有不同平台的差异性。1、Java内存模型参考书籍:深入理解Java内存模型 Java虚拟机规范试图定义一种Java内存模型,来屏蔽掉不同平台的差异。 1)主存与工作内存主内存与工作内存与Java内存区域中的Java堆、栈、方法并不是一个层次的内存划分(抽象
2016-08-03 23:33:54
463
原创 Android武器库
知名武器仓库Android-ArsenalTrinea/android-open-projectawesome-android-ui兵器一览知名利器对决网络请求哪家强图片加载到底哪家强武器拆解Volley 源码解析Android Universal Image Loader 源码分析
2016-08-03 23:28:35
393
原创 Java虚拟机--类加载机制
1、概述类从加载到虚拟机内存,到卸载出内存,分为:加载、验证、准备、解析、初始化、使用、卸载。 一般编程人员只用关注:加载、连接(分为验证、准备、解析)、初始化即可。加载、验证、准备、解析、初始化、卸载这5个阶段顺序是确定的。而解析阶段不一定:可以在初始化之后再开始,这是为了支持Java的动态绑定。什么时候进行初始化? 以上四条为主动引用,而被动引用,如下所示,不会引发类初始化 1. 子类
2016-08-03 22:46:42
365
原创 Java虚拟机先锋队
博主的Java虚拟机系列索引: Java虚拟机–内存区域划分 Java虚拟机–垃圾回收与内存分配 Java虚拟机–类加载机制 Java虚拟机–字节码执行引擎 Java虚拟机–编译期优化 Java虚拟机–内存模型与线程 Java虚拟机–线程安全与锁优化 相关阅读: Java虚拟机图解专栏 简直棒到没SEI了!
2016-08-03 18:10:02
352
原创 Java虚拟机--垃圾回收与内存分配
1、可回收对象的判定用来判断哪些对象可以被回收1)引用计数法给对象添加一个引用计数器,每当它被一引用时,计数器加1;当引用失效时,计数器减1。计数器为0,就表示可以回收了。缺点:难以解决两个对象之间的循环引用2)可达性分析算法通过一系列称为“GC Roots”的对象作为起始点,当一个对象到GC Roots没有任何引用链(Reference Chain)时,就证明此对象不可达。如下图,虽然object
2016-08-03 17:32:57
561
原创 Java虚拟机--内存区域划分
运行时数据区域 在运行时数据区内,白色部分的是线程私有的:虚拟机栈、本地方法栈、程序计数器程序计数器:线程私有,可以看做当前线程所执行的字节码的行号指示器。若线程正在执行一个Java方法,这个计数器记录正在执行的虚拟机字节码指令地址;若正在执行Native方法,则计数器为空。Java虚拟机栈:线程私有, 生命周期与线程相同。通常所讲的“堆”内存,“栈”内存的“栈”,与虚拟机栈或是说与虚拟机栈中
2016-08-03 15:24:55
378
转载 一道考察类加载机制的试题
public class Test1 { @SuppressWarnings("static-access") public static void main(String[] args) { Singleton s = Singleton.getSingleton(); System.out.println("counter1 = "+ s.count
2016-08-02 18:30:34
294
转载 Java异常机制
异常发生的原因用户输入了非法数据。要打开的文件不存在。网络通信时连接中断,或者JVM内存溢出。Java异常的类型检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。错误: 错误不是
2016-08-01 02:04:39
284
原创 HashMap源码解析
android-23/java/util/HashMap.java属性最小容量:private static final int MINIMUM_CAPACITY = 4;最大容量:private static final int MAXIMUM_CAPACITY = 1 << 30;加载因子:static final float DEFAULT_LOAD_FACTOR = .75F;
2016-08-01 02:02:18
303
原创 LinkedList源码解析
节点对象,采用双向链表。private static final class Link<ET> { ET data; Link<ET> previous, next; Link(ET o, Link<ET> p, Link<ET> n) { data = o; previous = p; next = n; }}
2016-07-30 01:40:53
327
原创 Android进程与线程
进程< activity>, < service>, < receiver>, 和 < provider>都支持android:process属性指定他们在哪个进程运行。< application> 也支持设置该属性,作为其它组件的默认值。进程生命周期进程的重要性一共有5级:前台进程托管用户正在交互的 Activity(已调用 Activity 的 onResume() 方法)托管某个 Ser
2016-07-29 21:48:41
306
原创 ArrayList源码解析
属性:最小扩容量:12private static final int MIN_CAPACITY_INCREMENT = 12;容量:int size;底层存储方式:transient Object[] array;构造方法默认初始化一个空对象数组参数为容量,需处理参数为负值、参数为0情况3.
2016-07-29 20:16:06
433
原创 HandlerThread与IntentService完全解析
好吧,不知道怎么转载,直接贴链接过来了 鸿洋大神讲得都特别好 Android HandlerThread 完全解析 Android Handler 异步消息处理机制的妙用 创建强大的图片加载类 Android IntentService完全解析 当Service遇到Handler
2016-07-28 02:49:36
563
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人