android一些开发心得

来源:互联网 发布:shell 定义数组 编辑:程序博客网 时间:2024/04/29 07:01

刚接触Android,做项目的时候遇到了很多问题,有些是不知道安卓本身就有这个功能,有些是对于一些问题的处理没有经验。下面这些问题有的是自己在工作中遇到的,有些是身边同事遇到的,分析不一定是对的,但是在项目中这些问题就是按下面所描述的来处理的,现在写出来做下记录,方便自己,方便他人。

1、为了提升进模块的速度,在主入口的onCreate方法里面做的工作越少越好,尽量只做与更新UI相关的工作,其它的工作延后处理,像判断是否为第一次进入模块这种不能延后处理的,应该考虑程序的运行效率,可以通过判断这个文件是否存在的方式来判断是否为第一次进入,因为第一次进入模块时,保存进模块记录的配置文件是一个从无到有的过程,判断文件是否存在的效率会优于读取文件的效率。

2、libproject不能直接进行单元测试,可以借助于对调用该project的工程进行单元测试来测试libproject。

3、Eclipse中出现如下图所示不明字符时,在Window->Preferences->General->Editors->Text Editors->去掉show whitespace characters然后Apply就可以了。


4、保存配置文件的操作最好在onPause()方法完成,不要在onDestory()和onStop()方法中实现;具体可以参考android官方例程中的NotePad,它保存文件都是在onPause方法中实现的,关于Activity在各种情况下的回调方法的调用关系,可以看一下下面这两篇文章:
(1)Android-Activity详解与汇总:http://www.cnblogs.com/TseChiHoi/archive/2012/08/30/2664221.html
(2)Android Activity类应用技巧分享:http://yangguangfu.iteye.com/blog/677240

5、完全退出一个进程需要一定的时间,在结束一个进程时,需要处理在退出后又快速进入这个进程的情况,还有需要确保在Activity onDestory的结束动画播完之后再调用结束进程的方法,不然会出现屏闪的情况,建议在退出进程时做类似于如下处理方式的处理:


6、对于静态类或者单例模式的类,应该将构造函数私有化,禁止外部将其实例化。安卓源码中很多静态类都做了类似的处理,比如TextUtils:


7、使用StarUML对代码进行逆向转换成类图时,StarUML对于代码中有的符号不识别会导致相应的类逆向失败,比如“<”,将这些不识别的符号替换掉或者删除逆向才能成功。

8、在初始化ViewPager时,应先给Adapter初始化内容后再将该adapter传给ViewPager,如果不这样处理,在更新adapter的内容后,应该调用一下adapter的notifyDataSetChanged方法,否则在ADT22以上使用会报The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged的异常,具体原因可参考:http://stackoverflow.com/questions/16756131/fragmentstatepageradapter-stopped-working-after-updating-to-adt-22

9、自定义控件时,在onDraw和move方法里面不能做过多的工作,和小系统相比,安卓的画图操作效率本来就不怎么高,对于这种频繁更新视图的方法里,一是要精简代码,二是要减小刷新区域。在写描红控件的过程中,从数据中取出来的每个字的字模都是成千上万个点的信息,这种显然不能在onDraw里直接操作,可以通过为画布设置一张图片,然后将点信息存放在画布上,在onDraw方法里只需要显示为这块画布设置的图片就可以了,具体操作类似于如下代码:

 


10、在退出使用ViewPager的界面时,记得在退出之前调用其removeAllViews方法,避免频繁进出该界面时内存不断上涨;

11、对于单个应用占用内存较多容易导致内存不足时,可以考虑按功能将该application的各界面分成多个进程来处理,从而分担主进程的内存压力。但是要记住一点,进程之间是不共享数据的。

12、当有多个属性决定排序的情况时,可以考虑将各个属性数值化,然后按照各参数的优先级对各个参数划分成不同的数量级,最终将每个需要排序的项的各个属性转化成一个待排序的数据(权值),排序只针对这个数值进行排序,就不用在排序的时候考虑那些复杂的规则了,这样在需求有变动时也好处理,只需要根据排序的规则为不同的属性值调整优先级,不需要修改排序的算法了。

13、在自定义控件时,三个构造函数都要定义,这样无论在xml文件还是在代码中都能正常使用了,如果只定义仅带Context的构造函数,会导致该控件在xml文件中使用时程序运行时异常。

14、在一个类里建议最多使用两个线程(在一本书上看到的,具体哪本搞忘了),线程太多了太难管理了,过多的线程时,只要稍管理不到位,就会出现很多随机问题,用线程锁也会有效率的问题。

15、对于一个类,需要满足不同的需求时,在初始化时,需要接收的入参也不一样,一般都是通过重载初始化的方法来满足各个调用者的需求,为了简化代码,可以考虑构建器来实现这种多个可选参数的情况,具体可以参考《Effective Java》一书的第二条“遇到多个构造器参数时要考虑用构建器”或者android源码中的AlertDialog类,它通过构建一个内部静态类Builder来降低代码的冗余。


如果你觉得上面的这些没啥营养,那就给你推荐点有营养的吧:
1、资源检索:百度网盘真的很不错,只要有一个百度账号,下载电子书什么的都是免费的。这个搜索引擎可以搜索出多数你需要的资源:http://so.baiduyun.me/
顺便分享一下我在百度网盘的资源,几十G的电子书:http://pan.baidu.com/share/link?shareid=249850146&uk=973539797 
这些书有些我还是在看的,不要说我只会屯资源。大家也可以注册一个玩玩,挺方便的。
2、资源:
(1) Android开发者必知的开发资源:                 http://www.importnew.com/3988.html 
(2)(不断更新)每个程序员都应该知道的那些事儿:    http://geek.csdn.net/news/detail/1566 
(3) Junit测试驱动开发:                          http://wenku.baidu.com/course/view/d9d776a20029bd64783e2c00 
(4) ANT使用全攻略:        http://wenku.baidu.com/course/view/dd2cbd64783e0912a2162a00 
(5) stack overflow:        http://stackoverflow.com/ 
(6) mobile tuts+:         http://mobile.tutsplus.com/category/tutorials/android/ 
(7)《The Busy Coder's Guide to Android Development》: http://pan.baidu.com/share/link?shareid=525553&uk=3810048654 
(8) 直接拿来用!最火的Android开源项目(完结篇):  http://www.csdn.net/article/2013-05-21/2815370-Android-open-source-projects-finale/1 
(9) InfoQ:          http://www.infoq.com/cn/

3、工具:
(1)快捷键管理工具Auto HotKey,找目录、开软件不用老用鼠标点来点去了:

(2)如果你还想进一步提高你的工作效率,推荐使用Total Commander,不过这需要一定的学习成本,需要学习一段时间才能熟练使用,我尝试两三次了,现在只能做一些基本的操作。

0 0
原创粉丝点击