- 博客(38)
- 收藏
- 关注
原创 你需要了解下Android View的更新requestLayout与重绘invalidate
在大家都了解过Android View的测量、布局、绘制机制后,我们来细化地分析一下关于View的重绘invalidate与更新requestLayout现象public class CustomEmptyView extends View { public CustomEmptyView(Context context) { super(context); }...
2019-03-28 10:01:50
601
1
原创 属于自己的Android框架路线
初级基础装箱与拆箱反射注解集合泛型锁与同步生产者与消费者Java引用类型五大基本原则Http四大组件Activity生命周期屏幕适配内存溢出内存泄漏Git使用中级巩固okHttp源码分析View绘制机制事件分发机制图片框架选用分析Handler异步动画Rxjava线程池Gradle单例模式各版本行为变更HybirdAndroid启动模...
2019-02-10 23:27:33
187
原创 万表商城Android架构演进
入职万表接近两年,从一入职就进行商城系统全新重构改版,经历过大半年的封闭式加班,到新商城的重构完成紧接着是新商城的业务完善与拓展。见证了开发团队一路走来的努力,Android团队也在自己的想法中向前迈进。前言在公司的发展方向上,从以前单一的万表商城App,延伸到服务类的万表名匠App、资讯类的万表世界App等多个还在孵化的项目,让我察觉到了万表商城App作为主流量入口,将来一定程度上会集合...
2018-12-03 09:59:07
502
原创 Android应用优化之冷启动优化
前言事件发生在发包上线的前两天,在某某云进行移动测试时,提示冷启动速度低于平均值的问题,之前自己也曾尝试过优化,但是发现效果并不是很明显,作为一个有追求的开发者,趁着有点空闲时间,要好好研究一下冷启动优化问题。App的启动流程我们可以了解一下官方文档《App startup time》对App启动的描述。应用启动分为冷启动、热启动、温启动。而冷启动是应用程序从零开始,里面涉及到更复杂的知识。...
2018-11-04 20:38:51
1852
1
原创 Android应用优化之流畅度优化实操
上一篇流畅度概念向大家详细地描述了VSync机制和Choreographer编舞者的用法。可能所讲解的内容偏向理论概念,因此这篇是流畅度优化实操,整篇主要分三层,UI层、代码逻辑层、IO层来讲述各个优化点,其中还会穿插多个辅助检测插件。可谓干货满满,希望对大家有用。最基本的UI层显示优化调试GPU过度渲染在App出现卡顿的时候,我们第一时间会想到我们的App是不是存在过度绘制的问...
2018-05-14 09:28:44
1357
原创 Android应用优化之流畅度
对于现今市面上针对于用户交互的应用,都有使用列表去展示信息。列表对于用户来说是十分好的浏览、接收信息的一个控件。对于产品来说,列表流畅度的重要性就不言而喻了。而流畅度的好坏,对一个产品的基本体验和口碑有着极大的影响。然而Android手机与iPhone手机对比,第一点往往就是流畅度的问题,对于技术来说,我们的Google亲爹,不断对这个诟病进行优化,包括GPU硬件加速、将Dalvik虚拟机换成A
2017-06-13 15:06:15
2555
1
原创 Android应用优化之代码检测优化
前言最近换了新的公司,面对新的代码大家都有不同的熟悉过程和方法。在我的角度来说,利用代码检测工具,可以更直接地去熟悉代码逻辑和业务逻辑,表现得自己去代码质量很有追求,最重要当然是在公司的任务管理工时上面显得自己积极向上啦。不过在修改代码之前,你要根据项目的分工、明确在公司的定位,不然会造成一些不愉快的事情,但是总的来说我们还是对代码质量有追求的!
2017-05-24 14:58:09
2986
2
原创 Android应用优化之内存概念
导语现在的Android智能手机发展信息万变,从一开始的HTC到小米价格战到现在高端市场份额战,在软硬件都发生了翻天覆地的变化。在硬件上内存从一开始的一两百M到现在4G。从软件上我们从一开始为了实现需求而写代码到现在为了代码更健壮、更漂亮而进行不断优化代码。这些都是Android发展的必然一步。今天我来跟大家一起分享Android内存优化的相关概念和实践。
2017-05-12 13:39:00
3451
1
原创 你需要知道的Android View的绘制
经过上一篇AndroidView的布局分析之后,我们继续View的绘制分析讲解。我们依旧从ViewRootImpl#performTraversals说起.
2017-02-27 10:18:11
957
原创 你需要知道的Android View的布局
上一篇我们分析Android View的测量。我们先回顾一下,View的测量,在ViewRootImpl#performTraverals方法下,先进行对DecorView根布局测量获取MeasureSpec,然后开始执行测量performMeasure(),通过View#measure找到对应View的核心onMeasure(),如果是ViewGroup,先递归子View,将父View的Measu
2017-02-27 10:08:46
858
原创 你需要知道的Android View的测量
上一篇我们说到了Android View的创建,我们先回顾一下,DecorView是应用窗口的根部View,我们在View的创建简单来说就是对DecorView对象的创建,然后将DecorView添加到我们窗口Window对象中,在添加的过程里,实际用到是实现WindowManager抽象类的WindowManagerImpl类WindowManagerImpl#addView方法,在addView
2017-02-23 15:02:14
2496
原创 你需要知道的Android View的创建
View的创建与绘制一向是很多人望而止步的问题。然而我们在平常的应用开发中是最经常运用到的setContentView(),我们都会用在Activity的onCreate()的时候调用setContentView()来加载编辑好的XML布局。但是实际上创建与绘制一个View,内部的实现方式的确比我们表面所编写的代码复杂得多,导致大家没能深入去了解View的创建与绘制。接下来我们一步步来了解View的
2017-02-21 16:16:14
1917
原创 设计模式之观察者模式
观察者模式是面向对象编程中较为常见的一种设计模式,观察者模式又称为订阅发布模式,可能大家对观察者模式从字面上可以理解,但是对代码层面上不太清楚如何实现,通过本文学习,相信你会对观察者有一个更清晰的了解。观察者模式:定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。
2017-02-14 15:23:01
428
原创 设计模式之代理模式
代理模式在我们生活中是十分常见的,例如,帮我打包午饭,帮我拿一下快递,这些是我们日常的代理模式。其中你是委托人,代理人是你朋友,而事件就是打包午饭、拿快递。代理模式的定义:Provide a surrogate or placeholder for another object to controlaccess to it(为其他对象提供一种代理以控制对这个对象的访问)。
2017-02-09 18:16:25
337
原创 你需要知道的Android上下文Context
Context对于Android开发者来说肯定不陌生,在我们跳转新的Activity、弹出Toast,创建View等行为时都需要用到Context,可见Context每天都伴随着我们,但是Context究竟是什么意思呢?Context从中文翻译上是上下文、环境、场景。我个人更倾向用场景来理解Context,例如创建一个View,我们在构造方法传一个Context的,而传进去的Context则代表着这
2017-02-07 16:57:20
769
原创 设计模式之构建者Builder模式
在前一段时间因为业务需求,标题栏的样式变得越来越多的元素增加,导致在TitleBarView(标题栏)的构造方法变得十分的累赘,于是我开始着手优化TitleBarView。
2017-02-04 16:03:09
384
原创 面向对象编程的五大原则例子分析
在应用开发的过程中,感觉最快乐也是最痛苦的莫过于优化、重构代码。在版本不断地迭代更新上线中,我们不但要保证功能能正常运行,而已我们的代码需要保证健壮性、稳定性、拓展性。然而在我们不断接受新的知识过程中,我们对代码的理解也会越来越深刻,从而出现了优化,甚至是重构代码的过程。在此之前我们更需要知道面向对象编程的五大原则。
2016-12-09 14:46:15
2713
原创 Java设计模式之工厂模式
今天学习下最常见的工厂模式,工厂模式细分下来有三大类: 1.简单工厂模式 2.工厂模式 3.抽象工厂模式工厂模式的目标都是:封装对象的创建。场景一:
2016-12-06 18:25:46
704
原创 Android动画之属性动画基础用法
在上一篇Android动画基础之补间动画与逐帧动画 ,我们复习了Android的基础动画Tweened Animation、Frame Animation,同时指出他们的缺陷,改变是View的显示效果而不是View本身的属性,还有我们不多不少会看多人家的APP有一些很酷炫的动画效果,但是我们Android本身的基础动画是用硬编码方式完成的,功能很有限,扩展性很差,无法满足的现今的产品需求。因为我们今
2016-12-02 17:43:00
418
原创 Android动画基础之补间动画与逐帧动画
Android动画分类主要分三类:Tweened Animation补间动画Frame Animation帧动画Property Animation属性动画现在我们来介绍一下补间动画。Tweened Animation补间动画,是通过配置动画文件(xml文件/Java代码)对View的内容进行一系列图形变换(有平移、缩放、旋转、透明度)来实现动画效果。无需逐一定义每一帧,只要定义开始、结束的
2016-11-15 23:35:07
1228
原创 EventBus3原理分析
在接入微信支付的时候,为了传递支付结果的值,就使用了EventBus,那时候只是简单了解了EventBus的使用,现在有时间就来深入研究一下EventBus的实现原理和源码。EventBus是一款基于观察者模式的事件发布/订阅框架。简化了应用程序内各组件间、组件与后台线程间的通讯
2016-11-08 00:27:55
927
原创 Android事件分发机制源码分析之Activity篇
在之前的事件分发分析中,曾提及到View的事件是由ViewGroup分发的,然而ViewGroup的事件我们只是稍微带过是由Activity分发的。而我们知道,事件产生于用户按下屏幕的一瞬间,事件生成后,经过一系列的过程来到我们的Activity层,那么事件是怎样从Activity传递到根ViewGroup的呢?
2016-11-01 23:01:06
431
原创 Android事件分发机制源码分析之ViewGroup篇
上一篇分析了Android事件分发机制源码分析之View篇 ,按照计划我们这篇分析一下关于ViewGroup的事件分发。那么我们首先要清楚理解一下View和ViewGroup之间的关系,LinearLayout是继承ViewGroup,而ViewGroup是继承View,View则是继承我们的所以类的基类Object。那就是说,我们平时使用的LinearLayout、RelativeLayout等等常用Layout都
2016-11-01 14:41:58
418
原创 Android事件分发机制源码分析之View篇
对于Android事件分发机制,我们在开发的过程中,肯定曾经遇到在最外层添加了ScrollView之后ListView无法正常滑动、我们的图片轮播在左右滑动图片为什么感觉很难控制。这些都是我们用户在屏幕上进行交互的一系列操作,因此深入了解Android事件分发机制是非常的重要。
2016-10-28 15:34:45
548
原创 Java设计模式之享元模式
享元模式:是对象的结构模式,以共享的方式高效地支持大量的细粒度的对象。 享元模式的核心思想是:如果在一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一使用都创建新的对象。在享元模式中,由于需要构造和维护这些可以共享的对象,因此,常常用到一个工厂类,用于创建和维护对象。
2016-10-26 00:00:49
340
原创 Android基础之AsyncTask源码解析
对于AsyncTask,想必大家一定不陌生,它是我们网络请求然后更新UI比较常用的一种方式,跟Thread+Handler一样都是我们处于耗时操作,然后通过发送消息去UI线程进行更新UI。
2016-10-20 20:42:27
353
原创 Android基础之异步消息处理机制
今天讲述一下Android的异步消息处理机制,说到异步,我们肯定会想到继承Thread,实现Runnable来处理耗时操作,然后再发消息去处理对应的业务逻辑。还有Handler、Looper、Message、MessageQueue之间的联系。
2016-10-11 13:41:44
651
原创 Java基础之ArrayList与LinkedList
在Java编程过程中,大家对ArrayList肯定不陌生,但是有没关注过ArrayList和LinkedList他们的区别呢?最后我们写的程序可能看似漂亮但是并不高效。那么我来分享一下ArrayList与LinkedList的区别。从数据结构上看,ArrayList是实现了基于动态数据的结构,而LinkedList是基于实现链表的数据结构。而两种数据结构在程序上提现出来的优缺点就在增删和改查的速率上
2016-10-10 00:09:50
386
原创 Android基础之内存泄露
内存泄露的基础理解一般内存泄露的原因是:由忘记释放分配的内存导致的。(如Cursor忘记关闭等)逻辑内存泄露的原因是:当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中。
2016-10-07 17:29:21
708
原创 Android基础之内存溢出
首先大家要清楚我们说的是内存溢出,术语来描述就是程序运行要求的内存大于虚拟机能提供的最大内存,会导致程序崩溃,也就是我们常见的OutOfMemory(OOM)错误。我们可以形象理解一下,不停向杯子里面倒水,当水超过杯子的容量后,水会溢出。
2016-10-05 19:16:06
738
原创 RxJava+Retrofit2+MVP实现网络请求
上一遍博客介绍了RxJava+Retrofit2的使用。在前段时间,刷招聘简历的时候,发现有一部分的公司会要求MVP模式的理解和具体使用。在现在越来越复杂的业务,我们的Activity的负担也是越来越大,因此接着这篇我结合MVP模式来介绍一下自己对RxJava+Retrofit2+MVP的使用。
2016-09-28 14:26:26
2316
3
原创 找到属于自己的RxJava+Retrofit2网络请求
现在网络上面铺天盖地都是RxJava+Retrofit2的博客,还有好多大神不断地造轮子。然后在前段时间,由于项目的空档期,我就对自己现在负责的项目尝试了一下这RxJava+Retrofit2的写法,对于我来说,首先是大量地看各位大神的博客,从中不断吸取精华,在结合自己公司的后台完成的一套属于自己项目的一套网络请求。
2016-09-27 16:08:00
3313
1
原创 Android基础之屏幕适配
Android基础之屏幕适配众所周知,Android机型尺寸五花八门,于是屏幕适配被成为我们Android开发很重要的一部分,Android屏幕适配的时候大家或多或少都会遇到各种问题,所以这也是面试一家新公司,面试官基本会问的一个问题,因为在我的角度看,不同公司不同项目它的屏幕适配的方法都可能不一样的。下面让我来分享我在网上看的各种屏幕适配资料再加上自己的实践得出的心得和经验。
2016-09-23 04:46:12
809
原创 Android面试之Java引用类型简答
对于Java对象的引用,在面试的时候会在OutOfMemoryError错误时被问到。下面我们对Java的强引用、软引用、弱引用、虚引用作简单的了解。强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器不会收回它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足
2016-09-20 22:20:52
623
原创 Android面试之Activity生命周期
在我们操作APP的时候,Activity之间会不断进行切换,其中就包含了每一个Activity的生命周期,我们就可以根据生命周期来处理不同的业务。 因此这也是面试官喜欢问到的问题。简单理解Activity的生命周期
2016-09-13 20:28:23
552
原创 Android面试设计模式之单例模式
在面试的时候面试官会问我们常用的一些设计模式,这里先介绍一下单例模式。为什么要使用单例模式1.控制资源的使用,通过线程同步来控制资源的并发访问; 2.控制实例产生的数量,达到节约系统资源; 3.作为通讯媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通讯。有多少种单例模式1.饿汉式public class CustomSingleton {
2016-09-12 18:25:29
1760
原创 Android面试之四大组件简答
Activity是用户可视的交互组件,也是我们用得最多的一个组件,负责向用户展示从网络获取、本地储存处理后的信息;Content Provider是获取其他应用的信息;Service是不可视的交互组件,我们会用来应用后台更新程序来使用;还有就是BroadCastReceive进行广播来进行发送与接收信息。各自负责自己的工作,然后怎么将他们协调在一起呢?那就是引出使用非常广的Intent类,组件与组件之间的通信、传递信
2016-09-12 15:45:13
2747
原创 Android面试之Activity启动模式
Activity的启动模式,是我们Android开发经常用到,也是面试官经常随口要你回答的一个点。 接下来我们了解一下。任务栈是什么 任务栈Task,是 一种存放Activity实例的容器,他是以栈的形式进行存放,也就是以先进后出,压栈和出栈。 在启动Application的时候,系统会默认创建一个Task进行Activity的存放,默认启动Activity会放在同一个栈,新启动的Activi
2016-09-09 17:18:54
350
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人