当前位置: 代码迷 >> Android >> 小弟我的Android最佳实践-ADT
  详细解决方案

小弟我的Android最佳实践-ADT

热度:91   发布时间:2016-05-01 20:12:30.0
我的Android最佳实践-ADT

(持续更新中。原创作品,保留所有权利,转载请注明出处)


开发了一段时间的Android应用,积累一些心得和经验,故而汇集成一份最佳实践,这个最佳实践肯定不是普遍意义上的“最佳”,而是“我的”最佳实践,但是我会随着学习研究的深入不断更新,希望它越来越好,欢迎批评指正。(注意:阅读本文需要有一定程度的Java和基本的Android基础知识)

以下是内容纲要:


1. 我的Android最佳实践-ADT

2. 我的Android最佳实践-Activity&Window

3. 我的Android最佳实践-Layout&View

4. 我的Android最佳实践-Service



多工程开发:

?

在Eclipse中可以将一个工程分成多个工程目录,一个作为主工程,其他作为子工程。子工程可以是Android工程,也可以是普通Java工程(ADT17开始不能直接引用Java工程了,需要自行编译Jar并导入)。主工程将子工程作为library引入进来,Android子工程需要在其工程属性中设定“Is Library”为选中才可被主工程引用。

?

子工程设置:


主工程设置:


?

调试程序的时候只需要将主工程部署到模拟器或者真机上即可。但是需要注意的是,ADT的自动编译功能工作的并不是很好,有时候在子工程编译完成后还需要clean主工程,方可将子工程的改动同步过去。


多工程可以方便管理代码,重用代码,但是也带来潜在的冲突问题,不同工程的资源文件(位于res目录),如果采用的相同的文件名的话,就会产生冲突,导致程序无法定位到正确的资源。解决方法是所有资源文件都以一个各自唯一的前缀命名。另外,在values目录下的字符串资源文件中,如果不同项目各自设定了同名的字符串资源,也会冲突,虽然这个冲突不会导致编译和运行问题(因为只是一个资源标识),但是也造成了一定的混乱,尽量也采用上面文件命名方法来命名字符串资源。


自动编译部署:

?

ADT在你每次修改资源或者源代码后保存时,会自动编译代码,打包资源,这个过程会花费一点时间,特别是工程比较大,资源比较多的情况下,花的时间会让人难以忍受。在一台Intel Celeron双核 E3300 2.5GHz,2G内存,系统为Windows XP的机器上,我一个大概不到10M资源的工程,每次保存修改的源代码时编译打包大概要花20秒的时间(这还没包括部署到真机或者模拟器上的时间),这样的条件进行开发是非常低效率的。不过幸运的是,在同样的硬件机器上,改用系统为Ubuntu Linux 11.04,同样版本的Eclipse+ADT,这个编译打包的时间缩短为5秒钟左右,这应该还算在可以忍受的范围之内。

?

?

有时候你用ADT的可视化工具改动layout之后直接部署调试,会出现类似

java.lang.ClassCastException: android.widget.TextView

的异常,虽然你可能只是调整了一下某个布局元素的位置,但是它还是发生这样的异常,通常clean重新编译即可。这个大概是ADT的bug导致的,没有去深究。



布局管理:

界面上一般的布局采用LinearLayout就可以了,如果需要复杂点的布局,比如横竖相间的布局,则可以在LinearLayout中嵌套一层或多层LinearLayout,并设置不同的方向(orientation)。如果需要更加复杂灵活的布局方式,可以使用RelativeLayout进行布局管理,RelativeLayout可以使用Layout align left|right|top|bottom 进行不同Widget之间的对齐。特别要注意的是该参数设定的对其目标必须在本Widget之前声明(XML中的顺序),否则ADT无法识别,会报编译异常。

?

为了使布局美观,避免拥挤的感觉,应当让布局中的各种元素之间保持适当的距离。Layout与其包含的Widget的间距用padding属性来设置,Widget与Widget之间的距离用Layout Margin属性来设置。


模拟器:

Android的模拟器可以让你在无真机的情况下进行程序调试,大概是由于X86和ARM体系不同的缘故,模拟器的启动和运行APP的速度都很慢(Win和Linux机器都是),所以模拟器不宜重复启动,每次启动后不要重启,直接修改程序并部署即可。


由于Android的机型非常多,规格千奇百怪,有各种的分辨率和尺寸关系存在,如果你想让你的应用在任何设备上都展示得当的话,就需要设置不同分辨率和尺寸关系的模拟器,设置这个关系的参数是:Abstracted LCD Dencity表示分辨率和尺寸的比率。那么如何计算这个比率呢?假设一台分辨率为800*400的的设备,计算得到它的对角分辨率是900,如果这个机器是5英寸的,那么这个dencity=900/5=180;假如机器是3.7英寸的,dencity=900/3.7=240。按照计算得到的数值设置Abstracted LCD Dencity即可创建相应分辨率和尺寸比率的模拟器(如下图)。

?

?

  相关解决方案