Android 事件机制解析(下)

1、写在前面 在上一篇已经分析了事件的分发流程,分发流程还是比较复杂的,要想彻底弄清楚事件的分发机制,还得自己动手实践。结合上一篇的源码分析总结给出了一张Android事件的分发流程汇总图: 结合上面给出事件分发图,通过打印log分析Android 事件分中的4种情况,并动手处理开发中常见...

2018-03-30 17:13:49

阅读数 35

评论数 0

Android 事件机制解析(上)

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

2018-03-23 11:22:41

阅读数 80

评论数 0

Java集合类总结

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

2018-04-20 16:53:41

阅读数 46

评论数 0

Volley 深入解析(上)

1、概述 在开发的时候多数情况下我们都会使用HTTP协议和服务器进行通信。Android SDK 提供了两种方式进行HTTP通信,即HttpClient和HttpURLConnection。不过直接使用HttpClient和HttpURLConnection进行通信需要自己处理通信的细节,包括数...

2018-04-19 14:58:52

阅读数 37

评论数 0

Java 注解工作原理解析

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

2018-04-15 21:16:52

阅读数 2621

评论数 0

设计模式总结

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

2018-04-08 22:03:45

阅读数 29

评论数 0

输入法内存优化总结

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

2018-04-08 11:36:05

阅读数 178

评论数 0

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

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

2018-04-07 21:40:32

阅读数 364

评论数 0

启动速度优化总结(下)

1、背景 我们继上一篇介绍如何计算启动时间以及工具的使用后,我们现在结合输入法项目通过TraceView来讲解优化过程。 2、分析 Multidex的使用 通过使用TraceView分析trace文件,发现Multidex调用的方法比较耗时。 MultiDex工作在主线程,而Dex的提...

2018-04-07 21:30:36

阅读数 47

评论数 0

启动速度优化总结(上)

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

2018-04-07 21:15:28

阅读数 124

评论数 0

Android 图片内存解析

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

2018-03-30 14:05:34

阅读数 61

评论数 0

跨进程使用ContentProvide出现死循环

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

2018-03-29 11:38:46

阅读数 90

评论数 0

深入解析Android Handler

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

2018-03-28 11:01:20

阅读数 212

评论数 0

Android多线程方式

1、前言 在Android开发中经常会使用到多线程,这里主要是总结Android开发中常见的多线程实现方式,以及这些多线程实现方式的一些特点 多线程实现方式主要有: 实现Thread的run()方法或者实现Runable接口 HandlerThread AsyncTask LoaderMa...

2018-03-26 22:58:22

阅读数 3019

评论数 0

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

1、背景 在开发过程中我们都会使用到手机的内部缓存、外部缓存。但有些开发者对这两个存储区域理解还够透彻,以为手机内置的存储卡(不可手机移除)就是内部存储, 可插拔的SD卡就是外部存储,其实这些理解都是有误的。这个知识点本人也重复看过好几次,但每次看完,过一段时间就会忘记,于是打算对这一知识点做...

2018-03-26 11:06:12

阅读数 1298

评论数 0

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

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

2018-03-23 20:51:31

阅读数 43

评论数 0

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

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

2018-03-23 20:43:37

阅读数 258

评论数 0

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

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

2018-03-23 20:34:59

阅读数 94

评论数 0

操作集合时出现ConcurrentModificationException异常

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

2018-03-23 20:29:28

阅读数 45

评论数 0

View的Draw过程解析

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

2018-03-21 21:01:08

阅读数 51

评论数 0

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