自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Looper景

预见自己、预见未来

  • 博客(23)
  • 资源 (2)
  • 问答 (3)
  • 收藏
  • 关注

原创 流行网络库第(三)篇---动手写图片加载的三级缓存

有很多第三方网络库都有三级缓存机制,比如BitmapUtil,ImageLoader等,今天来谈一谈是怎么实现的,首先三级指的是内存,文件,网络三级。OK下面开始写代码了。对于图片的下载逻辑,我们使用AsyncTask,在这个ImageLoadTask先把总体的框架给写出来,暂时先不管内存缓存,磁盘缓存,与网络请求逻辑怎么实现。public class ImageLoadTask extends A

2016-12-25 16:20:25 448

原创 Android性能优化第(十)篇---布局优化

之前在Android性能优化第(四)篇—Android渲染机制说了一下UI的渲染,我们知道Android系统每隔16ms就重新绘制一次Activity,如果没有完成就会有丢帧的现象。为了减轻UI绘制的负担,有必要把Layout编写的一些注意事项总结一下。首先说一下< include/>,< merge/>,ViewStub,如果对这部分清楚的朋友可以跳过。1、< include/>重用比如我们要写一

2016-12-24 18:43:56 1040

原创 流行网络库第(一)篇---Volley用法解析

Volley是2013年Google I/O大会上推出了一个新的网络通信框架,特么今年都2016年年尾了,这两年新技术出来的真是多的花了眼睛。虽然是三年前的开原库,但是并不妨碍我们研究它。这一篇先了解其基本用法,下一篇是源码解析,以后的网络库方面的分析,一般也是以这个套路来。 这是一幅经典的图,Volley的中文翻译为“齐射、并发”,这表示,Volley特别适合数据量不大但是通信频繁的场景,不支持

2016-12-23 16:31:23 508

原创 流行网络库第(二)篇---Volley源码解析

在上一篇,流行网络库第(一)篇—Volley用法解析中了解了Volley的基本使用,但是对于Volley可能有些朋友还不是特别清楚。我也是结合源码与其他人的分析,才真正弄清楚Volley的工作原理。 先看一个Demo,Volley十几行代码就完成了一次HTPP请求,我们看看这段代码内部究竟发生了什么?public class MainActivity extends AppCompatActivi

2016-12-23 16:30:09 443

原创 Android性能优化第(九)篇---App启动速度优化之启动页设计

在上篇文章Android性能优化第(八)篇—App启动速度优化之耗时检测处理说了应用启动的拦路虎在哪里,最后给出了优化思路,如果经过第一轮的优化之后,还是不满意的话,一般我们是做个启动页,因为启动页一般View的数量比较少,业务逻辑比较简单,启动就不太费劲。一、设计思路常规启动页设计思路通常点击桌面就会执行,Application中的逻辑,这部分的逻辑优化技巧在上篇介绍过,然后会跳入启动页Spl

2016-12-21 20:16:16 1110

原创 Android性能优化第(八)篇---App启动速度优化上

应用的启动速度缓慢这是很多开发者都遇到的一个问题,比如启动缓慢导致的黑屏,白屏问题,大部分的答案都是做一个透明的主题,或者是做一个Splash界面,但是这并没有从根本上解决这个问题。那么如何从根本上解决这个问题或者做到一定程度的缓解?一、应用的启动方式1、冷启动:当启动应用时,后台没有该应用的进程,这时系统会首先会创建一个新的进程分配给该应用,这种启动方式就是冷启动。2、热启动:当启动应用时,后台已

2016-12-21 11:16:50 7185 1

原创 Android性能优化第(七)篇---StrickMode严苛模式检测耗时与内存问题

StrictMode意思为严格模式,是用来检测程序中违例情况的开发者工具。使用一般是场景是检测主线程中本地磁盘和网络读写等耗时的操作。注意这个StrictMode是在Anroid2.3以后引入的。严格模式主要检测两大问题,一个是线程策略,即TreadPolicy,另一个是VM策略,即VmPolicy。线程策略(ThreadPolicy)检测的内容有1、自定义的耗时调用 使用detectCustom

2016-12-20 10:30:29 2824

原创 Android性能优化第(六)篇---TraceView 分析图怎么看

Android性能优化系列好久没有更新了,一直在写Android源码解析的部分,附上前面性能优化文章的链接。Android性能优化第(一)篇—基本概念 Android性能优化第(二)篇—Memory Monitor检测内存泄露 Android性能优化第(三)篇—MAT比Menmery Monitor更强大 Android性能优化第(四)篇—Allaction Tracing追踪内存分配的轨迹

2016-12-15 19:07:16 1350

原创 Gradle系列第(三)篇---Android Studio与Gradle那些事儿

· 本来这篇要写Android性能优化的,个人时间比较少,每天加班到很晚,写博客的时间就很少了,但是Gradle系列的文章还没有写完,所以补一篇,在Gradle系列第(二)篇—Gradle编程主要对象主要写了Gradle中的几个对象(Project,Settings,Gradle,Task、Action),现在聊一聊Android Studio中的gradle常见的功能需求。如果你還沒有阅读过我的

2016-12-14 16:42:48 897

原创 Gradle系列第(二)篇---Gradle编程主要对象

学习Gradle前,需要有一个Groovy语言的基础,以免被Groovy的语法困扰,反而忽略了Gradle的知识,可以大致看下上篇文章Gradle系列第(一)篇—Groovy语法初探1。作为一个菜鸟,很想知道 Gradle 的脚本怎么去写,也看了很多网上的文章,大多都是从脚本的角度来介绍Gradle,给我的感觉就是,只记住参数怎么配置,却不知道它们都是函数调用,有相关API对应的。比如我们很常见的一

2016-12-14 16:42:22 1785

原创 Gradle系列第(一)篇---Groovy语法初探

一、从Java到Groovy的关系Groovy能直接接受你的Java代码,也就是说在Groovy中写java代码也是可以的,因为Groovy 是一门JVM 语言,也就是,Groovy 的代码最终也会被编译成JVM 字节码,交给虚拟机去执行,我们也可以直接反编译这些字节码文件。从一段你很熟悉的代码开始,在循环中打印三遍hello java。 public void printHello()

2016-12-14 16:41:43 597

原创 Android源码解析Window系列第(三)篇---WindowManager基本原理

前面的两篇博客,总结了一下Window的基本知识,我们知道Window是一个抽象的概念,每一个Window都对应着一个View,Window的呈现方式是View,View要依赖Window,View和Window最终要关联在一起。Activity在android中所起的作用主要是处理一些逻辑问题,比如生命周期的管理、建立窗口等。Window的层次关系就如下面画的一样。详细参考前面两篇博客。 And

2016-12-13 21:47:26 2362

原创 Android源码解析Window系列第(二)篇---Dialog加载绘制流程

上一篇分析了一下Activity的Window创建过程和Window与Activity是如何关联到一起的,通过上一篇,我们对Window有了基本的认识。这一篇分享一下我对Dialog加载绘制流程的理解。首先创建一个Dialog,回顾下创建Dialog的流程。public class MainActivity extends Activity { AlertDialog alertDialo

2016-12-12 22:34:32 670

原创 Android源码解析Window系列第(一)篇---Window的基本认识和Activity的Window创建过程

您可能听说过View ,ViewManager,Window,PhoneWindow,WindowManager,WindowManagerService,可是你知道这几个类是什么关系,干嘛用的。概括的来说,View是放在Window中的,Window是一个抽象类,它的具体实现是PhoneWindow,PhoneWindow还有个内部类DecorView,WindowManager是一个interf

2016-12-12 09:29:59 2181

原创 Android源码解析Handler系列第(五)篇 ---HandlerThread你用过吗?

Handler这个系列总共有5篇,这是最后一篇了。前面三篇博客,我们从源码的层面将Handler消息机制梳理了一遍,第四篇站在源码层之上回顾以前学习时候困惑的一些问题。OK,开始飙车了,学习HandlerThread,如果你还没有看过我之前的四篇文章,建议去了解,只有深入了解的东西,才能被记住。 Android源码解析Handler系列第(一)篇 — Message全局池 Android源码解析

2016-12-08 20:28:58 1025

原创 Android源码解析Handler系列第(四)篇 --- 打破Handler那些困惑事儿

Handler这个总共有4篇,这是最后一篇,前面三篇博客,我们从源码的层面将Handler消息机制梳理了一遍,现在回头再看当时作为小白使用Hander所遇到的一些问题,显然,这些问题基本都可以做一个解释了。Android源码解析Handler系列第(一)篇 — Message全局池 Android源码解析Handler系列第(二)篇 — ThreadLocal详解 Android源码解析Hand

2016-12-05 19:43:38 579

原创 Android性能优化第(五)篇---Android UI渲染机制

优化性能一般从渲染,运算与内存,电量三个方面进行,今天开始说聊一聊Android的渲染机制,我们要知道Android系统每隔16ms就重新绘制一次Activity,也就是说,我们的应用必须在16ms内完成屏幕刷新的全部逻辑操作,即每一帧只能停留16ms,渲染机制说完之后,然后在说如何去优化UI。1、为什么是16ms16ms意味着1000/60hz,相当于60fps。这是因为人眼与大脑之间的协作无法感

2016-12-05 10:18:28 2677

原创 Android性能优化第(四)篇---Allaction Tracing追踪内存分配的轨迹

Allaction Tracing是追踪内存分配的工具,可以很直观的看到某个操作是如何一步步分配的。在Android性能优化第2篇—Memory Monitor检测内存泄露最后一点有简要提到过,现在具体研究一下,废话不多说,贴一下代码,我对这段代码进行内存分配追踪。public class LoginActivity extends AppCompatActivity { @Override

2016-12-05 10:17:18 1679

原创 Android性能优化第(三)篇---MAT比Menmery Monitor更强大

在Android性能优化第1篇—基本概念中讲了JAVA的四大引用,讲了一下GCRoot,第二篇Memory Monitor检测内存泄露仅仅说了Menmery Monitor的使用,这篇博客谈一下MAT来寻找内存泄露,相对来说,Memory Monitor没有MAT强大,但是在开始介绍MAT之前,上两篇没有说清楚的问题先说一下。 - GC回收对可回收对象的判定 什么样的对象是可以被回收的? 当然

2016-12-05 10:16:13 1588

原创 Android性能优化第(二)篇---Memory Monitor检测内存泄露

上篇说了一些性能优化的理论部分,主要是回顾一下,有了理论,小平同志又讲了,实践是检验真理的唯一标准,对于内存泄露的问题,现在通过Android Studio自带工具Memory Monitor 检测出来。性能优化的重要性不需要在强调,但是要强调一下,我并不是一个老司机,嘿嘿!没用过这个工具的,请睁大眼睛。如果你用过,那么就不用在看这篇博客了。先看一段会发生内存泄露的代码public class Us

2016-12-05 10:14:34 12483 2

原创 Android源码解析系列第(三)篇---深入了解Android的消息机制

Android的消息机制我觉得是每一个弄Android开发的人都要弄懂得问题,也有很多人对它进行研究,Android的消息机制的重要性不强调,但是觉得自己对Android的消息机制了解不深刻,所以决定深入源码,写下三篇博客以记之。因为Message全局池和ThreadLocal对Android的消息机制理解很重要,附上前两篇的博客地址。 Android源码解析Handler系列第(一)篇 — Me

2016-12-05 10:09:21 622

原创 Android源码解析Handler系列第(二)篇--- ThreadLocal详解

在上篇文章Android源码解析Handler系列第(一)篇说了Message的内部维持的全局池机制。这一篇仍然是准备知识,因为在Handler中有ThreadLocal的身影,大家知道,Handler创建的时候会采用当前线程的Looper来构造消息循环系统,那么Handler内部如何获取到当前线程的Looper呢?这就要使用ThreadLocal了,ThreadLocal可以在不同的线程之中互不干

2016-12-05 10:07:33 624

原创 Android源码解析Handler系列第(一)篇 --- Message全局池

1、UI不能在子线程中更新是个伪命题我们常说UI需要在主线程中进行更新,子线程就不能更新UI吗?不是,我们并不是说不能在子线程中更新UI,而是说UI必须要在它的创建线程中进行更新,比如下面一段代码在子线程更新UI就不会报错。 new Thread(new Runnable() { @Override public void run() {

2016-12-05 10:05:30 1432 3

JAVA知识点的三十个经典回答

对JAVA基础而又很重要的知识的总结,可以看看,技术好的就不要看了,适合入门的人

2014-03-02

Thinking in java

JAVA公认的的经典之作,讲的很具体到位

2014-02-24

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

TA关注的人

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