在开发软件项目中遇到苦难怎么解决(软件开发遇到的困难,怎么解决的)

投稿- 2023-08-10 13:06:14

我们为什么要出书 书籍排版印刷到底选哪家公司好

老铁们,大家好,相信还有很多朋友对于在开发软件项目中遇到苦难怎么解决和开发软件解决办法的相关问题不太懂,没关系,今天就由我来为大家分享分享在开发软件项目中遇到苦难怎么解决以及开发软件解决办法的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

本文目录

  1. 开发app怎么提高运行速度
  2. 在开发软件项目中遇到苦难怎么解决
  3. 企业开发难度大的解决方法
  4. 软件开发方法

开发app怎么提高运行速度

App运行速度分析以及初步优化方案

一、App运行速度分析

(1)硬件约束

CPU主频,多核;

CPU主频决定手机的运算速度,多核则更多体现在并发任务方面。

内存:运存与内存(RAM+ROM)

图1-1移动端内存示例图

运存是指手机运行程序时的内存,也叫RAM简称运存;RAM越大,手机可运行的APP应用程序越多,运行越流畅,目前RAM基本是2GB够用,3GB流畅,4GB极佳。

内存是指手机的存储控件,也叫ROM;ROM越大,手机储存的文件空间越多,目前ROM基本是16GB,32GB,64GB;ROM不影响手机的运行速度。

当运存(RAM)匮乏时,运行大型APP会出现卡顿、黑屏甚至出现暂时性卡死状态。

在运存不够时可以采取手动关闭后台不必要的程序进行释放,或者通过手机管理软件进行内存释放,例如手机管家、手机安全卫士等。

(2)网络环境影响以及服务器接口环境

网络状况直接影响业务型APP的体验,例如用户登陆业务;登陆时手机端需要向服务器发送用户的登录名及密码等信息,服务器进行信息核对后返回登陆状态指令,手机端接收到返回信息进行业务跳转。登陆业务只需要进行一次接口调用,在网络和服务器环境都理想的情况下,http三次握手时间可以控制在1秒以内。综合考虑手机端网络以及服务器环境,登陆控制在2.5秒内是可以被用户接受的。

手机端针对网络环境可采取相应的缓存策略以降低服务器的频繁访问,从直观上提高页面响应速度。根据业务级别提供相对可靠的有损服务,可采用懒加载、延迟异步加载等方式降低服务器压力。

对于服务器可采用缓存服务器、分布式服务器、反向代理等方式进行数据提供业务,对于图片、视频等媒体资源采用CDN进行加速。服务器端的优化性能提高率远大于手机端优化的提高率。

(3)View的绘制过程

Measure(计算)->Layout(定位)->Draw(绘制)

整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的,函数做的执行过程可简单概况为根据之前设置的状态,判断是否需要重新计算视图大小(measure)、是否重新需要安置视图的位置(layout)、以及是否需要重绘(draw),其框架过程如下:

图1-2View绘制流程示例图

View的绘制时间可以利用hierarchyviewer工具进行查看。

图1-3hierarchyviewer示例图

上图Measure为0.089ms,Layout为0.115ms,Draw为1.088ms,该view的绘制总耗时为1.292ms。

(4)16ms原则

目前大多数手机的屏幕刷新频率是60hz,如果在1000/60=16.67ms内没有办法把这一帧的任务执行完毕,就会发生丢帧的现象。丢帧越多,用户感受到的卡顿情况就越严重。16ms时间很短,身为一名应用开发者,为了让用户有更好的体验,应该要充分利用这16ms,确保刷新一帧的时候在16ms内。

图1-4UI刷新示例图

如果你的某个操作花费时间是24ms,系统在得到VSYNC信号的时候就无法进行正常渲染,这样就发生了丢帧现象。那么用户在32ms内看到的会是同一帧画面。

图1-5丢帧示例图

优化16ms问题可以通过尽可能减少过度绘制,减少布局嵌套,尽可能不要在UI线程做过多耗时操作。

(5)OverDraw过度绘制

当设计上追求更华丽的视觉效果的时候,我们就容易陷入采用复杂的多层次重叠视图来实现这种视觉效果的怪圈。这这很容易导致大量的性能问题,为了获得最佳的性能,我们必须尽量减少Overdraw的情况发生。

图1-6过度绘制四种级别示例图

蓝色、淡绿、淡红、深红代表了4种不同程度的Overdraw情况,我们的目标就是尽量减少红色Overdraw,看到更多的蓝色区域。

(6)GC垃圾回收

GC一般耗时在几毫秒到几百毫秒之间,然而对于手机16ms渲染机制来说,GC会带来不小的开销,所以在开发过程中尽量避免显示调用GC。频繁GC会导致页面卡顿,当执行GC操作时,任何线程都进入暂停状态,等待GC操作结束后才能够继续运行。导致频繁GC有两个原因:

1、内存抖动,即大量的对象被创建后又在短时间内立刻被释放

2、瞬间产生大量的对象会严重占用YoungGeneration的内存区域,当达到阀值时会触发GC过程。

以上这些GC操作可能会造成丢帧情况,如下图:

图1-7GC时丢帧示例图

24ms的GC形成了丢帧,用户感知到页面卡顿。

(7)同步任务过多

页面启动时同步任务过多会在短期内过多占用手机资源,直接导致其他性能下降,影响页面响应时间。例如在Activity的onCreate方法中进行了大量的同步任务。

二、初步优化方案

综上所述,App运行速度分析概括为以下七点:硬件约束、网络环境影响以及服务器接口环境、View的绘制过程、16ms原则、OverDraw过度绘制、GC垃圾回收、同步任务过多。在这里我们只对移动端开发并对后面五点提出相应的初步优化方案:异步延迟加载。

不妨先针对View的绘制过程、16ms原则来分析下某首页,采用hierarchyviewer工具分析首页如下:

图2-1首页MLD分析示例图

从上图可以看出首页包含了1435个view,Measure耗时43.476ms,Layout耗时1.141ms,Draw耗时2.840,总耗时47.457ms(大于16ms)。基于16ms原则,该页面会出现丢帧情况从而导致卡顿现象。针对这种长篇幅的页面可以根据实际情况进行异步延迟加载,对于第三屏、第四屏、第五屏采用梯级延迟加载从而避开同步加载。

异步延迟加载的关键是延迟时间为多少是合适的,对于配置较低的手机延迟相对要高一些,对于配置较高的手机延迟相对要低一些。如果延迟配置的不合理的话,高配置手机会产生等待延迟加载的内容的情况,而低配置手机会出现优化效果不明显的情况。所以这个时间需要结合业务以及不同配置的手机进行测试来确定的。

针对GC垃圾回收,我们以某APPMainActivity为例子分析下。MainActivity作为项目中所有Activity的托管,采用getLocalActivityManager().startActivity().getDecorView()方法获取启动Activity的视图进行显示。jumpActivity为切换Activity的方法,每次进行页面跳转时必须经过该方法,该方法包含GC过程。通过测试分析统计出每次跳转页面GC的耗时在8ms到300毫秒之间,这里的GC时间会随着下个启动页面的工作量越多而耗时越长。我们采用异步处理一下,GC过程耗时在0~4ms之间,效果提升显著。

使用低配置的手机打开某APP进入首页时会黑屏8~·14秒,然后出现界面,通过代码分析发现首页同步初始化五个重量级的Fragment,导致系统运存缺乏,影响了后续的界面绘制渲染等逻辑。我们采用异步延迟加载进行处理一下,先对第一个主Fragment进行异步加载,主Fragment加载完毕后再异步加载第二个Fragment,接着第三个,最后第四个,这样就可以在短时间内合理分配运存,避免了黑屏的情况。

以上就是App运行速度分析以及初步优化方案,我们只有对App运行速度的硬件环境、开发的软件因素以及App运行交互的原理进行了解后才能制定相应的优化方法,方可对症下药。对于每一个可能影响用户体验的问题进行逐步优化,以先解决大问题、迫切问题为前提,以解决繁琐、细小的问题为原则进行深入优化,App体验才会越来越好。

在开发软件项目中遇到苦难怎么解决

项目开发里面可能碰到无数种的困难,有个人级别的问题,比如bug,有组织的问题,也有系统级别的问题。

我们先假设这是个人级别的问题,比如你制造了一个bug。你要做的事情非常简单。

①,判断你能不能自己解决问题,最忌不懂而装懂,也忌不能而逞能,要如实汇报并且积极自行debug。如实汇报就是积极解决问题的第一步。

技术上可以做些打桩分析,增加log等等,这些常用的办法要积极使用,不能让别人感觉你一点想法和努力也没有。比如双击断点,使用debug模式运行,然后一步一步的分析调查问题所在,就是常用手段。

②,积极向有经验的同事请教,也可以自己通过专业网站比如csdn或者百度得到同行们的帮助。上面经常回答问题或者提问,或者自行搜索类似问题往往会发现你并非第一个碰到问题的人。在那里你经常会得到一些惊喜。

③,要做好从失败中得到经验的准备,要多问自己,为什么这个问题自己不能发现,为什么自己引入这个问题,为什么自己没有能力解决,我应该做些什么来避免类似的问题,如果再碰到类似的问题,我应该用什么手段解决。想进一步提升自己,丰田模式可以阅读一下,5why,RCA,EDA可以了解一下,这个对于帮助你做出有质量的软件非常有帮助,如果你想从事项目管理,那么对软件开发的深刻理解也是必不可少的。

④,相信自己,没有任何能复现的问题是不能解决的。只是有没有碰到合适的人来指点一下而已。不断的咨询,不断的尝试,永不言败是一个程序员最优良的品质。

如果是组织的问题,不要怨天尤人而是要积极建议组织改进。比如你碰到这样的情况,要思考这是不是最适合公司,最能带来效率的方式。

①,一个人开发大模块甚至大项目

②,没有设计文档,直接开发代码,碰到问题再解决,这些是不是量产公司应该的做法。

③,没有测试设计,想到什么测什么。客户那里一堆问题。

这样的行为在小公司非常普遍,但是是不是正确的方式,值得思考并拿出你的解决方案,真正的老板会喜欢你的风格和态度的。

如果是系统级别的问题,多个模块都需要改进,那么组织一定需要有人能够主动站出来,领导各个相关人等一起解决这个问题,不要觉得自己不可以,组织里非常希望看到有担当的人站出来。

①,组建作战团队,所有相关人员都要加入。

②,了解现状和差距,制定突破方向。

③,每一个突破点都要专人跟进,清晰测试计划及时调整。

④,如需架构变化要积极跟进并重估工作量。

⑤,即使一时半刻解决不了,确保你已经在最正确道路上努力,并且相信这是最快道路。

⑥,不放弃直到解决问题。

最后,没有解决不了的问题,只有懒人思路和事不关己高高挂起的工作态度,调整好自己的思路,丰富自己的办法库,一定可以解决问题的。

企业开发难度大的解决方法

如今企业APP软件开发的难度相对前几年已经大大降低了,APP软件市场需求之大,带动了APP软件开发技术的不断发展,不少软件开发企业都发展出了自己的APP开发技术,甚至有了APP技术开发专利,例如apicloud平台就有自己的APP软件开发技术专利,而且市面上拥有各种各样的APP开发辅助工具包,所以现在开发一款APP软件已经不是那么困难了。

?

目前APP软件开发方式主要有三种,开发难易度不同,开发出性能也各不相同。

第一种是nativeAPP开发的方式,此种开发方式是APP软件比较传统的开发方式,nativeAPP开发主要是将APP软件里的内容数据下载到用户手机里,针对安卓或者iOS系统各采用不同的开发语言和框架去开发APP软件,相对复杂,开发周期长,但是软件性能好,用户体验好。

第二种是webAPP开发方式,web开发主要是将APP里边的内容通过html代码以及特效css.js代码等编写成页面,然后将页面放到服务期,类似于网站,用户通过手机访问里边的内容,这种开发方式方便维护,开发周期相对较短,但是对用户网速要求高。

第三种是hybirdapp开发方式,这种开发方式目前

用的比较多,hybirdAPP开发主要是用js和native相互之间的调用,适合跨平台开发,这种开发方式开发周期短,APP软件维护简单,是目前企业比较流行的开发方式。

各种方式都有自己的优缺点,有自己的用运场景,而且不同开发方式价格也相对不同,因此企业开发APP软件要依据自己业务的特性去选择APP的开发方式,APICloud是专业app软件开发平台,拥有专业的产品经理,会依据客户的需求而为客户做出最专业的选择。

软件开发方法

在上个世纪60年代中期爆发了众所周知的软件危机。为了克服这一危机,在1968、1969年连续召开的两次著名的NATO会议上提出了软件工程这一术语,并在以后不断发展、完善。与此同时,软件研究人员也在不断探索新的软件开发方法。至今已形成了八类软件开发方法。

关于在开发软件项目中遇到苦难怎么解决的内容到此结束,希望对大家有所帮助。

软件工程 个人用 二 软件项目开发过程与管理
  • 声明:本文内容来自互联网不代表本站观点,转载请注明出处:bk.0755org.com/11/90566.html
上一篇:在孩子面前情绪失控,应该如何及时补救
下一篇:地下城与勇士选择角色后无响应(dnf选择角色就无响应win10)
相关文章
返回顶部小火箭