Android 事件处理机制分析

智能手机的操作都是通过各种事件来进行处理的,了解Android的事件处理机制,对日常的应用开发具有很多的好处。本篇文章将围绕事件处理机制进行展开,进行尽可能详实地分析,说明事件是如何在多个View层级之间进行传递的。

一、基础假定

由于篇幅的限定,我们只关注最基本的几种事件:Down、Move、Up和Cancel。一个Android定义的操作手势Gestures 往往是由用户点击屏幕触发Down事件,用户移动手指会触发Move操作,操作结束的时候,会触发Up或者Cancel。可见对于这几个基本的事件的了解非常有助于我们学习Android的事件处理机制。同时为了叙述的方便,这里排除多点触摸的情况。

Android 内存泄露分析

转载请注明出处: http://woaitqs.github.io/android/2016/02/01/android

摘要 最近在开发过程中遇到了不少内存泄露的问题,而且也由此引发了崩溃率的升高,因为花了一些时间来解决内存泄漏的问题。在这里将发现、定位和解决问题中得到的一些经验分享出来,便于诸君参看。

一、什么是内存泄漏

内存泄露在编码过程中经常会遇到,通常我们在系统的崩溃栈中,能够看到与下面类似的异常。

java.lang.OutOfMemoryError: Failed to allocate a 4308492 byte allocation with 467872 free bytes and 456KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:988)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2580)
at android.content.res.Resources.loadDrawable(Resources.java:2487)
at android.content.res.Resources.getDrawable(Resources.java:814)
at android.content.res.Resources.getDrawable(Resources.java:767)
at com.nostra13.universalimageloader.core.DisplayImageOptions.getImageOnLoading(DisplayImageOptions.java:134)

内存泄漏是指某些本来应该被回收的内存,因为某些原因导致没法被回收,从而使得可用内存越来越少,当可用内存不足以进行分配的时候,系统可能会爆出 OutOfMemory 异常。

Android 最佳实践 (2)

这篇文章主要讲一些能改善性能的一些小 Tips。使用正确的算法和数据结构是第一优先级的事情,但不在本文的讨论范围中。本文中的一些小 Tips 能够显著改善一些编程习惯。

简单而言,是2方面的工作

  1. 不做不必要的工作
  2. 不分配不必要的内存

在 Android 系统中进行开发面临的一个显著问题就是我们所开发的 App 将在多个机型上运行,这些机型的分辨率,性能等差异巨大。

Android 最佳实践 (1)

RAM 在任何软件开发中都是非常珍贵的资源,在内存受限的手机系统中显得更加弥足珍贵。尽管Android的Davlik虚拟机能够对内存自动进行垃圾回收,但这并不意味着你能忽略你的应用对内存的分配和释放。

为了使得垃圾回收器能够及时回收内存,需要避免内存泄漏(例如一个全局变量持有对你的引用),同时要保证在合适的时间释放掉这些引用对象。对于大多数应用而言,做到上面的内容就足够了,Davlik负责处理剩下的内容。

接下来的内容将说明Android系统如何管理 app 进程,内存分配,和如何在开发 Android 应用的时候降低内存使用。当需要得知一些如何在 Java 编程中合理利用内存资源,可以参考一些网上的其他书籍。Android 系统提供了比较方面的方式便于你去分析你应用的内存占用情况,链接在Investigating Your RAM Usage

感恩节札记

今天是国外的感恩节,外国的月亮比较圆,好多中国人也过起了这个节日。我对这个节日的印象还是停留在火鸡上面,其他的大抵就很陌生了。想在这个节日里写一点东西,只是因为今年是一个很特别的年份,也发生了一些不一样的事情,还遇见了不一样的人。

6年

在即将度过大学生涯的时候,会有些舍不得,一方面意味着自己要进行角色的转换,另一方面这也是一片生活了6年的土地。6年前的冬天也和现在一样寒冷,树叶早就因为凛冽的东风早早坠落在土地上,仰头往上看的时候,除了偶尔的暖阳,一切都很死气。在那个冬天,我很讨厌北京,讨厌这个做任何事情都一堆人的地方,讨厌空气里扩散的冰渣,想要回到温暖的南方去。但我还是呆了下来,以呆到现在就6年时光。6年时光里,可以发生很多事情,可以去过很多地方,事实也如此。