自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Android 事件机制解析(下)

1、写在前面在上一篇已经分析了事件的分发流程,分发流程还是比较复杂的,要想彻底弄清楚事件的分发机制,还得自己动手实践。结合上一篇的源码分析总结给出了一张Android事件的分发流程汇总图: 结合上面给出事件分发图,通过打印log分析Android 事件分中的4种情况,并动手处理开发中常见的滑动冲突问题:a. 默认情况,全部返回super,默认情况是不拦截不消费事件的。b. View...

2018-03-30 17:13:49 69

原创 Android 事件机制解析(上)

1、背景Android的触摸事件(MotionEvent)的传递机制还是有些复杂,内容会有点多,所以分为上下两篇来讲解。 《Android MetionEvent事件解析(上)》分析事件的分发流程,当清楚了事件分发流程后,我们需要结合一些实例进一步熟悉Android的事件传递机制,所以在《Android MetionEvent事件解析(下)》会提出几个问题,并通过源码进行分析。 分析事...

2018-03-23 11:22:41 122

原创 Java集合类总结

1、概述集合是Android开发比较重要的知识点,数据集合是同来存储数据的容器,通过容器给提供的接口可对容器中的数据进行增删查改。为了满足开发者的不同需要,JDK提供多种类型的集合,这里我们整理了一下Java 提供的集合类,便于以后的记忆。 把众多的集合类划分为两大类。即非键值对的存储集合在存储数据时提供一个Key,即以Key-Value键值对的方式存储两种类型的集合分别实现下...

2018-04-20 16:53:41 92

原创 Volley 深入解析(上)

1、概述在开发的时候多数情况下我们都会使用HTTP协议和服务器进行通信。Android SDK 提供了两种方式进行HTTP通信,即HttpClient和HttpURLConnection。不过直接使用HttpClient和HttpURLConnection进行通信需要自己处理通信的细节,包括数据缓存、超时处理等细节。于是一些Android网络通信框架就应运而生,而Volley就是在2013 G...

2018-04-19 14:58:52 89

原创 Java 注解工作原理解析

1、背景在Android开发中会经常使用到Java注解这个知识点,如:重写父类方法时使用@Override注解、阅读框架源码时常看到@Deprecated注解。 特别现在有很多优秀的Android开源框架都是使用注解,如EventBus、ButterKnife、GreenDao等。 Java注解是Java开发一个很重要的知识点,所以觉得有必要对Java注解这块知识点有一个深入的学习。...

2018-04-15 21:16:52 15354 2

原创 设计模式总结

学习设计模式的宗旨是为了提高代码的扩展性和阅读性,易于系统的日后维护。我们在进行功能设计时都应遵循下面的三个原则:单一职责原则,一个类只承担一种职责,如果承担的事情过多,就等于把这些职责耦合在一起。开放-封闭原则,类可以扩展,但是不可修改,即对扩展是开放的,对修改是封闭的。依赖倒转原则,高层模块不应该依赖细节,细节要依赖抽象。dfsd简单工厂模式 把对象的创建从业务逻辑中分...

2018-04-08 22:03:45 60

原创 输入法内存优化总结

一.背景最近测试人员对我们的产品进程内存占用测试,并和竞品的内存占用情况进行对比,得出的结论是我们的产品占用的内存比竞品多出不少, 所以需要对产品进行内存优化,我主要负责对商店进程的内存进行优化,以下是优化的过程和优化结果的总结。二.优化设备:Samsung Galaxy S4 Android version:5.0 主要在下面五个场景来对内存占用情况进行分析并优化场景1:首...

2018-04-08 11:36:05 407

原创 键盘闪动问题分析及解决方案

1、背景在之前的一些版本开发中,需要在键盘候选区的顶部添加一个View,但发现当键盘真在显示时,如果我们动态的往候选区的顶部加一个View或者是去掉一个View,键盘都会出现闪动的现象,为了找到键盘闪动的原因我们先对键盘的布局比较清晰,后面也是经过使用一些特殊的方案,解决了键盘的闪动问题,现在就来对这一问题进行总结。 这里主要是分两部分来讲解,先将InputMethodService的创建过...

2018-04-07 21:40:32 1171

原创 启动速度优化总结(下)

1、背景我们继上一篇介绍如何计算启动时间以及工具的使用后,我们现在结合输入法项目通过TraceView来讲解优化过程。2、分析Multidex的使用 通过使用TraceView分析trace文件,发现Multidex调用的方法比较耗时。 MultiDex工作在主线程,而Dex的提取与DexOpt的过程都是耗时的操作,所以ANR的问题是必然存在; 拆分出来的Dex越多,对应ANR...

2018-04-07 21:30:36 123

原创 启动速度优化总结(上)

1、背景最近用户反馈应用启动慢,经测试人员确实存在首次启动慢的问题。为了优化应用启动时间,本文主要是记录排查启动慢问题。2、启动方式应用启动分为冷启动、温启动、热启动,本文主要是针对冷启动进行优化。冷启动有两种优化方案,一种是通过使用启动页提高用户体验,一种是优化启动效率,本文主介绍如何进行启动效率的优化。3、应用启动过程简单的解释一下应用启动过程: 点击Launcher,启...

2018-04-07 21:15:28 188

原创 Android 图片内存解析

1、背景要展示一张图片,先得把图片加载到内存,才能把图片显示出来。在Android开发中,显示图片有很多种方式,而区别就在于显示图片时占用的内存和显示的效果不同。 Android内存优化中图片显示是需要特别关注的点,所以这里总结展示图片的方式,并对每种方式进行分析其内存的占用情况。用来显示图片的ImageView.setImageResource()方法内部实现是通过BitmapFact...

2018-03-30 14:05:34 130

原创 跨进程使用ContentProvide出现死循环

一、问题背景最近遇到了StackOverflowError的异常问题,具体信息如下:StackTrace=nulljava.lang.StackOverflowErrorat java.lang.IntegralToString.convertInt(IntegralToString.java:216)at java.lang.IntegralToString.appendInt(...

2018-03-29 11:38:46 171

原创 深入解析Android Handler

1、背景在开发中我们经常会使用到Handler,对Handler的使用应该是比较熟悉的,但对Handler的工作原理可能还不是很清楚,今天来带大家深入学习Handler的工作机制。一般使用Handler的场景如下:子线程和UI线程进行通信,例如:子线程负责耗时操作,并通过Handler把的结果传递到主线程。可以使用Handler发送一个延时操作在分析Handler时会涉及到一些类...

2018-03-28 11:01:20 361

原创 Android多线程方式

1、前言在Android开发中经常会使用到多线程,这里主要是总结Android开发中常见的多线程实现方式,以及这些多线程实现方式的一些特点 多线程实现方式主要有:实现Thread的run()方法或者实现Runable接口HandlerThreadAsyncTaskLoaderManager2、Thread方式一般使用异步操作最常见的一种方式,我们可以继承Thread,并...

2018-03-26 22:58:22 9842 1

原创 解析Android内部存储、外部存储的区别

1、背景在开发过程中我们都会使用到手机的内部缓存、外部缓存。但有些开发者对这两个存储区域理解还够透彻,以为手机内置的存储卡(不可手机移除)就是内部存储, 可插拔的SD卡就是外部存储,其实这些理解都是有误的。这个知识点本人也重复看过好几次,但每次看完,过一段时间就会忘记,于是打算对这一知识点做个总结,也可当成学习笔记分享给大家。 主要分为下面两点进行分析:Android设备文件系统的目...

2018-03-26 11:06:12 7338

原创 Android 4.1以下设备上调用canvas.clipPaht( )异常

1、问题在最新的一次需求中,需要自定义一个下载进度条的View,在重写了onDraw(canvas)方法并使用canvas.clipPaht( )这个方法,在测试阶段都没有测试出问题,但是上线以后从后台看到一些报错,如下:StackTrace=nulljava.lang.UnsupportedOperationExceptionat android.view.GLES20Canvas.c...

2018-03-23 20:51:31 95

原创 使用Sketch库,出现找不到.so文件

1、问题在最新的一次需求中,需要展示Gif图,通过衡量了Glide和android-gif-drawable这个这两库的展示效率,决定使用android-gif-drawable。于是从github直接把最新的arr包下载下来,并直接加入到项目,显示效果也非常的好,但发现在某些设备上一进入应用就会直接崩掉,log如下: StackTrace=loadLibrary:dalvik.system...

2018-03-23 20:43:37 347

原创 Android 4.3以下, 调用measure(0, 0)抛java.lang.NullPointerException异常

1、问题新版本上线后, 后台出现了java.lang.NullPointerException报错,异常发生在RelativeLayout的measure( )方法内部,measure( )方法调用方式如下:// 实例化一个RelativeLayout对象mDefaultView = LayoutInflater.from(getContext()).inflate(R.layout...

2018-03-23 20:34:59 210

原创 操作集合时出现ConcurrentModificationException异常

1、问题在最新的一次需求上线后,后台报了很多ConcurrentModificationException异常,其实是很低级的错误,但还是记录下来,避免以后再犯这样的低级错误,报该异常的代码如下:public void removeAllModule() { Set<Integer> keySet = moduleMap.keySet(); ...

2018-03-23 20:29:28 178

原创 View的Draw过程解析

1、问题View经过了Measure和Layout这个两个过程后,View的大小已确定,以及View的位置也确定,接下来就是要把View显示出来,这里我将继续分析View的Draw过程。2、分析Draw过程的入口点从ViewRootImpl.performTraversals( )方法开始,在perforMeasure()和perforLayout( )后,接下来来就是执行perf...

2018-03-21 21:01:08 110

原创 View的Layout过程解析

1、问题《View的Measure过程解析》中分析了View的大小测量过程,View的大小确定后,就是确定View在父容器中的位置,接下来我们就来分析View的布局流程。2、分析与分析View的Measure过程一样,从ViewRootImpl.performTraversals( )方法开始分析View的Layout过程,我们在该方法中可找到Layout的入口performLay...

2018-03-21 16:42:49 142

原创 深入解析View展示流程

1、背景如果想在Activity中显示一个布局,做法是在Activity的onCreate()方法中使用setContentView()方法设定想要显示的布局,如下所示:@Overrideprotected void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); setContentView(R.lay...

2018-03-20 21:36:56 83

原创 View.measure(0, 0)方法什么情况下能正确计算宽高

1.问题在最新的需求中,想通过getMeasureWidth( )方法获取一个FrameLayout布局的measureWidth值,但由于未进行Measure步骤,所以getMeasureWidth( )最终会返回0。所以想手动调用View.measure(0, 0)方法,主动触发Measure步骤。再获取measureWidth。但该方案对一些View是无效的。下面分析在什么情况下执行me...

2017-06-08 23:29:34 2301

原创 View的Measure过程解析

背景《Activity.setContentView()内部实现解析》中分析了View是如何被添加到DecorView中,添加到DecorView后View对用户来说还是不可见的。View在呈现给用户前,它需要经过Measure -> Layout -> Draw三个步骤。本文将从DecorView的源码开始,分析View的Measure过程。预备知识–测量概述View在呈现出来前,需要确定的第一个

2017-06-06 00:37:11 170

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