IntelliJ IDEA导入Android源码工程(AOSP)
这篇Blog主要介绍一下在IntelliJ IDEA中如何导入整个Android源码工程。
首先,确保整个Android源码被编译成功了(至于不知道如何下载Android源码和编译源码的同学请自行Google),在out目录中所对应的机型目录下成功生成了system.img这个文件。接下来就是如何导入的详细步骤了:
Read on →请注意:接下来的命令都是在你所下载的Android源码的根目录中执行。
这篇Blog主要介绍一下在IntelliJ IDEA中如何导入整个Android源码工程。
首先,确保整个Android源码被编译成功了(至于不知道如何下载Android源码和编译源码的同学请自行Google),在out目录中所对应的机型目录下成功生成了system.img这个文件。接下来就是如何导入的详细步骤了:
Read on →请注意:接下来的命令都是在你所下载的Android源码的根目录中执行。
大多数刚接触Android开发的同学可能会对onInterceptTouchEvent
和onTouchEvent
这两个方法的调用时序搞不明白,我刚开始也是,只是知其然,但不知其所以然。其实很多事情最重要的是亲手去做,一旦自己亲手去做了,很多事情就会豁然开朗。下面我们通过代码和Log将这两个方法的调用时序给大家展示明白。
onInterceptTouchEvent
是ViewGroup中的方法,从字面上理解很简单,就是拦截Touch事件,返回true表示拦截,返回false表示不拦截。
onTouchEvent
是View中的方法,它也返回一个布尔值,true表示对这个Touch事件进行处理,消耗(consume)了这个事件,false表示对这个Touch事件不进行处理,没有消耗这个事件,然后将这个事件返回给它的父亲处理。
首先,我们一定要对Android的触控系统(Touch System)充分理解,当我们手指按在手机屏幕上的时候,首先是当前的Activity接收到这个事件,然后通过dispatchTouchEvent
方法将事件分发给当前的布局(layout),最先接收到事件的是布局最外层的ViewGroup,也就是身为父亲的ViewGroup,然后它再通过自己的dispatchTouchEvent
方法将这个事件传递给它的孩子(View或ViewGroup),如果此时这个父亲在它的onInterceptTouchEvent
方法中返回true表示它将这个事件拦截了,以后的所有事件都不传递给自己的孩子了,在自己的onTouchEvent
中返回true来处理这个事件,返回false交给它的父亲来处理这个事件。反之,以后的事件它都传递给自己的孩子,让自己的孩子来处理这个事件,同时它也监听着。一旦拦截了就将以后所有的事件都不会传递给自己的孩子了,这个过程是不可逆的,直到下一个周期到来(接收到下一个Down事件)。Android的触控系统是以接收到一个Down事件到接收到一个Up或Cancel事件为一个周期的。Android的触控系统就是这样将事件层层传递和层层返回的。
注:此为毕业设计中学院要求的翻译与自己所做毕设相关且不少于2万字符英文原始资料的任务,由于自己毕设做的是Android方面的开发,所以决定翻译一下Android官方文档中Training和API Guides中的部分内容。由于水平有限,如有错误,望理解。
当一个应用程序组件启动并且这个应用程序没有任何其它组件运行时,Android系统会为这个应用程序启动一个新的执行单线程的Linux进程。默认情况下,同一个应用程序的所有组件在同一个进程和线程(称为“主”线程)中运行。如果一个应用程序组件启动并且已经为那个应用程序存在一个进程(因为那个应用程序的另一个组件存在),则这个组件在那个进程内启动并且使用同一个执行线程。然而,你可以将应用程序的不同组件安排运行在不同的进程里,并且你可以为任何进程创建额外的线程。
这份文档讨论了进程和线程在一个Android应用程序里是如何工作的。
Read on →注:此为毕业设计中学院要求的翻译与自己所做毕设相关且不少于2万字符英文原始资料的任务,由于自己毕设做的是Android方面的开发,所以决定翻译一下Android官方文档中Training和API Guides中的部分内容。由于水平有限,如有错误,望理解。
这份文档主要涉及当结合使用一些微优化时可以提高应用程序的整体性能,但让这些优化给你的应用程序带来显著的性能影响是不可能的。选择正确的算法与数据结构应该总是你首先要考虑的,但这些内容在本份文档的范围之外。你可以用这份文档中所写的这些提示作为通用的编程技巧,而且为了通用的代码效率你也可以融入到你的编程习惯当中。
编写高效代码有两条基本规则:
不要做你不需要做的工作。
如果能避免分配内存就不要分配内存。
当微优化一个Android应用程序时面临最棘手的问题之一就是你的应用程序肯定要运行在多种类型的硬件上。不同版本的虚拟机运行在不同的处理器上的运行速度也是不同的。甚至不是一般的情况例如简单的说“X设备比Y设备快(慢)F倍”以及从一个设备上得到的结果扩展到其它设备上。特别是在模拟器上的测试几乎不会告诉你什么关于在任何设备上的性能。在带与不带JIT的设备之间也有巨大的差异:对带JIT设备来说是最好的代码但在不带JIT的设备上不总是最好的。
为确保你的应用在各种各样的设备上表现良好,请确保你的各级代码是高效的并致力优化应用的性能。
Read on →各位做Android开发的Developers可能早已受够了Google自带的模拟器,它确实又慢又卡,所以大多数Developers都是用真机调试,然而真机自然也有它的不方便之处,那就是你需要一台测试真机,这个一般公司都能给你提供,最主要的是它还是比较慢,做过iOS的人都喜欢用模拟器比真机多一点,除非一些在模拟器上调试不了的功能,因为iOS的模拟器比真机还快,还不需要安装一系列必要的Profile,之前做iOS的时候无不感叹iOS模拟器的方便,想着Android什么时候也能有这样一款模拟器就好了。今天偶然发现了这款叫Genymotion的模拟器,支持跨平台,亲测后只能用一句话来形容:“它真的太棒了”!启动速度和运行速度和自带的完全不在一个数量级上,是自带的几十倍,堪比iOS模拟器。强烈推荐做Android开发的同学们以后都用这款模拟器。也许发现的有点晚,但总比一直没有发现好吧,简单Google了一下发现网上配置教程也比较多,其实也不需要什么教程,按照官网上的做就行了,还是比较容易上手的,下面简单的来说一下安装过程和安装好后遇到的一些问题吧。
Read on →在公司的电脑上用Octopress搭好个人Blog后进行了一些初步设置后因为工作太忙然后搁那儿就没动了,等周末时间空出来后准备用自己的Mac Air重新搭建和配置一下Octopress以便以后都用自己的电脑在闲暇的时间来写写博客。在搭建时执行 bundle install
命令时总是报如下的错误:
很久之前就想搭一个个人Blog了,但一直苦于找不到一个合适的Blog平台。之前搞ACM的时候在CSDN上写过一些题解,主要做模板和记录的作用,写过几篇后就不了了之了。然后体验过国外很火的轻博客Tumblr以及国内的点点等,这些平台都不能完全的私人定制,感觉甚是不爽。说到这儿可能会有人问为什么不去用WordPress,其实之前是有试着用WordPress去搭的,但感觉很是麻烦,先不说部署时的学习曲线,还要自己去找服务器,国内的免费服务器支持的不是很好,新浪云有支持,但免费的还是不能完全的私人定制,花钱租服务器觉得不划算,觉得还没有到花钱的地步,不是自己舍不得这笔钱,主要是认为自己才刚开始,博客一时半会儿不会到拥有大量读者的地步而且主要是自娱自乐。还有一个原因当时真得没有时间去折腾这个。所以这件事也就搁置了好久,一直到现在。
Read on →