- 博客(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 2825
原创 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 1589
原创 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
TA创建的收藏夹 TA关注的收藏夹
TA关注的人