您的位置:首页 > 其它

程序开发经验总结

2014-07-21 11:35 351 查看

软件开发经验总结

一开发方面

1.调试软件的使用的方式的选择:选择单步调试还是选择打Log。

(1)对于容易复现,且能够单步调试的地方优先选择单步调试。

(2)对于不易复现,且单步调试无法分析时,那么选择打印详细的Log信息,以便在下一次复现时,通过分析Log来定位。

2.使用Log,并在打印Log的地方使用开关,以便发布后关闭Log的打印。

在项目开发中,遇到不稳定的第三方库,一定要使用Log来打印主调API的参数和返回值,也要打印回调的参数值。

3.谨记:在项目开发前期,首要考虑的是性能问题,即软件的速度问题和内存使用问题,也就是说首先要考虑用户流畅性的体验问题。

而不是首先去考虑功能问题,因为功能通过不同的多种多样的技术都能够实现,但是不同的技术实现出的性能问题是不一样的。

4.谨记:在项目开发前期,同样要考虑软件稳定性,即不能让APP经常Crash掉。

5谨记:在开发过程中在打印日志或者提示用户时,不能图省事直接进行硬编码,否则到项目后期是一定要去除硬编码的,一样的要花时间。

而应该使用成员变量或者在字符串资源中声明字符串的方式使用。

6. 编程惯用法:使用生产者消费者多线程模型来异步加载数据,注意线程间的同步机制。 
7.编程惯用法:对于Bitmap图片应该使用缓存机制来加载图片从而提高app的用户流畅性体验和性能。缓存的大小要固定,并且要对缓存使用了LRU策略(least
recently used)来释放图片,从而解决了Bitmap的OOM问题。 
8.编程惯用法:对于大数据的加载使用了分页或者分段的原则加载,因为在屏幕显示的数据总是只有那么几个,并不需要一次性全部加载到内存中,应该按需去取数据。从而在数据很多的情况下,不影响用户的流畅体验。

9.用户在快速的滑动过程中,先不要去加载数据,只有当用户手势停下来了再去加载数据,因为在快速滑动中的数据,其实并不是用户想看到的。

10.关于函数实参到形参传值的理解。

(1).函数和变量一样也是需要空间来存储的。

(2).函数的参数传递要用函数栈来理解。函数调用前要把先前的东西入栈,调用后要把先前的东西出栈。故函数的参数传递只能传值。不同的是可以传递参数本身的值,如基本数据类型。也可以传递实际参数本身的地址的值,这个针对类的变量。穿地址值给人的感觉像是传递引用,其实还是传递的是地址值。这时改变形参接收到的地址值是不会导致实参的地址值发生改变的。但如果改变形参接收到的地址值所指向的对象的值,那么就会导致实参所指向的对象值也会发生改变。这也给人的感觉是传引用。传地址值的好处就是减少实参到形参的内容拷贝的时间和空间的开销。我实参告诉一个地址,形参你就按照这个地址去取值或修改就可以了。

二项目管理方面:

1.的生命周期总结各个的区别:

(1)顺序式:开发按软件开发的完整步骤一步到底进行。即:需求收集-》分析-》设计-》编码-》集成-》测试。直到完成,不会发生重复其中的任何环节。

(2)迭代式:在需求收集已经完善时使用。通过不断重复原型阶段:分析-》设计-》编码来进行工作,在期间就是不做测试和集成。测试盒集成放项目后期去做。

(3)增量式:在需求收集只有部分时使用。这里首先必须分析选择整体架构。之后一直重复软件开发的完整步骤去开发每一项功能,即每一个功能都要经历:

分析-》设计-》编码-》集成-》测试。即每重复一次增加一项可用的新功能。

(4)敏捷式:就是迭代式+增量式。这里首先必须进行部分需求收集以及规划游戏。然后按需求重复时间盒,每个时间盒产生已通过测试并可运行的功能。

三架构方面:

1.对于一些框架的搭建:可以去学习和使用了JAVA的注释技术和反射技术来框架的初步搭建。

2.在软件开发过程中一定要时刻记住一个万能模型:MVC模型。写代码时刻记住将数据处理的代码和UI显示部分的代码分开,以便数据的处理模块和UI的显示模块间能够各自独立的变化,只要他们之间的通信接口不变就行。实现了模块间的低耦合。从而使数据的处理和UI的显示能够各自独立的进行,实现了模块间的低耦合。

3.分层模型:每一层做每一层自己该做的事情,需要其他层的帮助则调用各层协议给出的通信用的API接口,从而获得需要的数据和服务。比如Android系统就是一个很好的分层模型:APP层->Framework框架层->运行时库层->Linux内核层。

4.双进程策略:在一个应用中去生成两个进程,前台UI进程和后台网络进程,他们之间进行进程间通信。这样做的一个好处就是后台网络进程发生了异常被关闭之后,UI进程可以重启该进程,并在发生异常前通过使用永久存储来保存必要的现场数据,并在异常发生后重启后台进程,并读取之前保存的现场数据来恢复现场。对于UI进程就好像没有发生任何事一样。当然最终要去查找后台网络进程发生了什么异常。

在Android中进程间通信首先想到的是Binder,由于后台进程容易被Android系统的ActivityManagerService关闭掉,导致Binder通信会出现中断的问题。而Android的BroadcastReceiver同样具有进程间通信的功能,所以有时使用Broadcast比Binder好些。

5.多线程模型:

由于SDK层是与网络进行通信,并且要维护本地数据库中的数据。这其中包含的网路操作以及数据库操作,对于UI界面层来说,都是相对耗时的操作。通过SDK来获取相应的数据必须通过线程以及异步回调的方式来进行,否则会给用户非常卡的体验。线程池中做后台工作线程池工作完成后,在UI主线程调用异步回调Listener。在UI主线程中回调异步Listener的原因是,Android规定所有对UI进行更新的操作必须在UI线程中进行。否则Android要报一个运行时异常。

6.数据传递方式-JSON

而JSON能够在对象和字符串之间进行转换。Google已经对JSON进行了封装,该封装类叫做GSON。通过GSON中提供的方法能够很方便的把要传递的JAVA对象转换成String对象,同样SDK传回的String对象通过GSON提供的方法很容易获得一个JAVA对象。由于Binder只能传输Java基本数据类型的数据以及String类型的数据。所以Android的进程间通信Binder也可以传递String对象,通过JSON,能够在JNI层,Binder进程间进行数据的传递。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息