为什么说android开发很蛋疼

学习任何一门新的技术都是需要很多时间和实践经验的,但是对于安卓开发来说,就算你已经干了2-3年,你仍然会感觉很吃力,总是这里或者那里出问题。在过去的两年里,我搞过一些客户端性质的中型项目,几乎每个项目都会遇到同样的问题重复出现,我从来没有因为随着经验的积累而感到得心应手过,为什么安卓开发这么难?下面我列举一些常见的问题,也许你也会有同感。

支持不同的设备

安卓的碎片化确实让开发者吃了很大的亏,除了hello world 级别的应用,你完全没办法保证自己的app能在所有设备上都完美运行。 至少你得让你的app兼容各个版本的4英寸手机或者是10英寸平板。这就意味着要使你的应用看上去舒服,就得适配各种尺寸,除了尺寸的问题,你还得考虑ppi的问题(dip解决不了所有问题),总之你需要为你的app设计至少两套UI界面,同时准备3-4套资源文件,当然测试的工作也增加了一倍。

Configuration Changes你真的让人很烦

最烦的事情莫过于横竖屏切换了。手机切换横竖这是再常见不过的事情,刚刚开发安卓的时候我以为切换横竖屏那是系统做的事情嘛,切换之前是啥样,切换之后也应该还是啥样,不管是界面还是界面上的数据都是原封不动的,但是我错了,所有工作都是需要我们自己来做的,shit。通常你不做任何处理都不会有太大问题,但是当你使用Fragment或者AsyncTasks 的时候往往会出现一些莫名其妙的崩溃。真不知道android的开发部门是基于什么原因才这样设计,不过 Configuration Changes的问题倒是可以在AndroidManifest.xml中用android:configChanges="keyboardHidden|orientation"  规避一部分,但是要是我横竖屏的UI是两套呢?

大量相同代码

=========

一般在activity中,我们首先的做一些初始化的工作,这些工作基本上是一块一块的,设置View(findViewById),给view添加Listener。很快你的代码就显得一团糟了,尽管写了一堆的代码,但是我们还没有开始实质性的工作,为了解决这个问题我们可以采用类似于butterknife 的注入库。

崩溃

就算你认为你的程序完全没有问题,还是有可能会NullPointerException。

Context

几乎每一个方法或者是类都需要用到Context参数。你不得不想方设法把Context的实例在类与方法中传来传去,维持一个Context的实例阻止系统对他的的垃圾回收,然后瞬间你的内存就不够用了。

开发工具以及编译机制

一般我们使用eclipse作为IDE,eclipse使用起来简单,但是速度真的非常慢,有时候明明已经没有问题了,还总是找不到资源文件R,什么也不做,重启Eclipse,R又有了,或者是删除Eclipse工程相关的文件,重新导入项目,也能解决R的问题,这根本不是开发者该做的事情嘛,模拟器的效果就更不用说了。现在有了android studio 了,beta版本的studio!!!eclipse 和studio又是完全不同的编译方式 一个是ant 一个是gradle,当你的项目是eclipse,想用一个github上的库却发现是studio 项目!简单的studio项目转eclipse是不难,但是复杂点的,也许就需要你先研究下代码才能转过来了。

在一个设备成功运行,在另一台设备上崩溃

很多手机厂商(尤其是大陆),为了突出自己设备的个性化采用深度定制的系统,一些Library可能被修改导致你的应用崩溃,为了保证你的app尽可能的运行在更多的设备上,一些本来是android独有特性的开发功能只好放弃了。

碎片化

2014-06-18 03_07_24-Dashboards _ Android Developers

android已经发布了5个大版本,但是仍然有很多设备在运行2.3那种古老的系统,也就是说如果你的老板想让兼容那些设备,你不得不牺牲新系统上的很多优秀功能,比如holo主题等,当然还有其他办法,有第三方的比如holo everywhere可以让2.3也用到holo,可是代码量呢,一下增加了不少。

不过随着安卓的成熟,这些问题越来越容易解决。