android系统开发-心得体会

    记得最开始搞android培训出来那会,开始都是简历造假去找的工作,那时也没接触过系统开发,当时也就像想着能找到个工作就不错了,而当时第一份工作就是做系统开发,虽说那时工作也不怎么忙,但也算是入了个行,基本的东西还是熟悉了。

    个人感觉自己培训出来java基础和做过类似apk的培训或者做过apk开发的做系统开发还是有一定优势的,昨天同事问个代码关于接口回调的,感觉做系统开发的同事java基础不是那么扎实,以前还是会有种想法,感觉做系统开发最基本的是熟悉源码开发的编译环境,然后懂一点java代码就行了,懂一点点android的大概也就差不多了,然后客户有需求来了,百度一下,都有现成的,复制粘贴一下,客户的问题就解决了,感觉自己就入行了,能做事了。后面觉得java基础还是很重要的,基本的语法不熟悉的话,去跟代码都没思路,比如接口的实现都不知道到那里去找,需求需要起线程实现业务,看有的都是百度下能实现功能就行了,new Thread就ok了,需求要做个按顺序执行的线程时都是一脸闷逼,并且也没有那种做apk带来的那种思想和习惯,比如内存优化,性能优化之类的想法,看以前同事的做测试apk代码,一个adapter里面的getview都没convertview重用的逻辑,就是能实现功能就行了,客户需求要做个类似apk的东西,做系统开发的同事心里看上去还是有些虚的,一个应届毕业的同事搞了一年了,需求过个测试apk,给他一个类似的apk源码让他改一下逻辑就行了,他表示代码看不懂,我也是无语了,也不清楚他平时怎么做的客户需求,还有的同事apk报错抓log都用adb抓,然后把机器的所有log抓查出来要我帮忙看下原因,我也很无语,感觉他们都不用eclipse或者androidstudio去看log提示的么,一个把int数据转成字符串还要去百度一下,用as输入个string.valueof什么的就都提示出来,复制粘贴下过去就ok了额。

    其实我想表达的就是java基础和android基础很重要,做系统的也可以尝试着去做些简单的apk,熟悉下开发工具,以及做apk开发的一些思路和注意事项,因为其实系统开发和apk开发很类似,系统的客制化很多很多的时候就是修改一些系统原生的apk和系统服务的逻辑,android的四大组件,activity/fragment的基本生命周期,ui控件,点击事件等等都是由这些基本的东西组成的,这些基本的基础不扎实,看源码或者跟代码解问题的时候都会效率比较低,再加上本来系统的源码就比较多,跟的会更加累。

    我感觉做系统开发,当然最开始还是要熟悉基本的一些linux指令和系统开发编译及调试的整套流程,如何修改代码,然后push到机器生效,这些基本的熟悉了之后,如果java基础不是很好的,还是多看下或者反复的看下关于java基础的书或者百度熟悉下知识点,比如一些字符串的基本api,数组,集合,接口,抽象,继承,线程,线程池,handler等等,源码很多逻辑都是这些组成的,这些知识点很熟悉代码才看的懂,代码如何跟才会有思路,然后是android基础,android的四大组件的作用及区别,生命周期,ui的基本控件都要熟悉,控件的常用api,xml要看的懂,什么values/string,menu菜单的使用,桌面小部件(launcher3中客制化会用到),基本上android的基础在系统中都会用的到,但是你apk有些还不一定会经常用的都会有涉及到的,所以基础一定要扎实,其实回过头来一想,这些都是一些面试中经常被问及到的一些知识点,或许很多人都是做了几年之后回过头来想觉得这些基础东西真的很重要,所以才会被加到面试里面去的。补充一点的就是git管理,这个不是一定要会,但是会这个对于代码管理来说还是很方便的。其实系统客制化的东西要介绍的太多了,解过的bug也太多了,不可能一一描述,后面只能通过某个点去扩散自己解过的相关的bug了,而且系统客制化很多东西不像apk开发,很多东西百度一下资料一大把,但是客制化的东西是针对某个或某些客户的需求,有的时候不是百度就能搜得到的,需要自己理解原理,跟代码一步步去调试解的。

    工欲善其事必先利其器,然后是辅助类的软件工具了,首先最基本的是代码编辑工作,我以前培训的时候老师推荐的是EditPlus,后面觉得这个不行了,还是notepad好用,notepad界面也好看点,而且比较方便获得代码的文件路径,还有最好也装个UltraEdit,目前发现这个软件的好处是看byte数据比较方便,因为有的文件存入的都是byte数据的,用有的软件打开显示的都是乱码(- -,当然其他软理论上应该也是有类似的功能的只是自己没去摸索了)用这个软件可以直接打开看,比较方便的能看到16进制的数据,对于调试很方便,还有一个功能是过滤log,搜索了log的tag关键词之后可以直接过滤帅选出来到一个文本界面显示,调试很方便。然后是代码比较工具BCompare了,这个也是经常会要用到的,比如合补丁或者比较以前别人的代码,确实很方便,还有个就是用于自己做笔记的记事本软件 了,推荐用 nyfedit,这个软件安装文件很轻,使用很方便,文本插入简单,可以记录文本也可以插入图片,我以前还傻逼逼的文本用txt的保存,有图片的就用word,然后项目管理就用个文件夹存txt和word,后面别人推荐用这个软件,真的是一步到位,全部搞定。然后是做系统开发的同学最好熟练用eclipse或者as(最好是熟悉这个,用起来比eclipse好),优点很多,源码开发很多时候只能修改文本,不像apk开发有工具,有代码提示,但是系统开发可以两者结合,用as的代码提示工具然后复制粘贴代码到文本里面去,这样比较快速方便,eclipse的有点是原始代码结构和源码接口很相似,可以直接复制粘贴过去,加个清单文件即可,而as代码结构就比较繁琐,与源码的有点不一样(具体细节注意事项可以见另外一边文章预置apk总结),用eclipse/as去抓log也是很方便的,加个tag就行了,不必用adb去抓log,或者导文件出来去一个个看,还有就是eclipse/as自带的ddms抓界面的包名类名,抓界面控件id,还有sdk自带的hierarchyviewer.bat,对于跟踪代码都是很有帮助的。当然还有其他不是很常用的取色器,查看数据库db文件的软件,360助手,TotalControl(对于没显示屏的机器调试很方便,可以用电脑操作界面),TeamViewer(可以远程操作自己或别人的电脑),apk反编译工具,查看反编译源码的工具,ps(有的时候需要改客制化的壁纸尺寸等东西时,没有美工就只能自己改了),这些软件不是100%需要的,但是最好还是都熟悉下,很多时候都会用的到。

    除开上面那些基本的,我感觉要做的比一般的工程师好的话,还有一些也是必要的。

    首先是开发基础,相信很多人都是后面才转的android,之前可能是各行各业的,我觉得之前一直是从事开发行业的人转android的比其他行业的转过来的要强,原因是做开发的思维方式及开发经验问题。首先是思维方式,做开发的很多都类似都是一个发现问题解决问题的过程,而这个过程用到的方法其实很多都是差不多,用的最多的就是排除法,根据原理去分析问题可能存在的可能性,然后着个排除,最后定位问题,解决问题,我觉得之前学的专业应该也属于开发基础里面的,大学是电子专业的做系统开发的是有点优势的,因为系统开发很多都会涉及硬件,涉及底层软件,大学是计算机软件类的应该做纯app(不结合硬件的那种)开发是有优势的,因为大学有学过相关专业,有专业基础或者在那样的大环境里熏陶过(当然大学打酱油的除外)有思维基础。然后是开发经验,我大学参加过电子设计竞赛,我感觉那个对于自己后面做开发行业还是很有帮助的,那个时候是什么都不懂,头几年都是打酱油的,后面才开始认真搞学习,做项目,从什么都不懂,然后到慢慢懂一点,到入门,都是通过不停的百度,不停的看资料,思考问题,解决问题中慢慢提高的,相信做过开发工作的应该都能理解那种过程,毕业之后做硬件开发也是差不多,都是开发类的工作,都会积累一些类似的开发经验,我觉得虽然行业可能不同,但是思维方式,解决问题的方式是差不多的。

    然后是习惯,我个人感觉一个良好的做笔记及总结的习惯对于自己的提升是很多的,经常碰到同事,以前解过的问题,再次解的时候又一时半会找不到地方,或者不记得怎么解去了,如果每次解完问题之后都自己做下笔记记录下,第一是印像会很深刻,第二是下次用的时候看下笔记的话就一下子就能找到地方,这个就需要适时的总结以及将相关的文件整理一下的好习惯了。然后是思路梳理习惯,这个也是很重要的,当自己不知道如何下手,或者是解问题解了半天都不知道如何下手的时候,最好是先冷静一下,然后拿个纸笔或者用软件笔画下思路,重新梳理下问题是什么,自己的思路是什么,自己目前遇到的问题是什么,问题可能存在的原因是什么,然后一个个的用笔去划掉排除,因为这种方式比较直观,比把那些思路积累在大脑里面效果要好些,因为存大脑里面比较抽象,不直观,或者容易被其他的事情干扰。想要解决比较繁琐的逻辑问题,思路清晰是必不可少的。

    还有就是逻辑思维能力强,这个也有点像别人所说的天分,或者思维灵活,我觉得这种逻辑思维能力强是可遇不可求的。有的时候感觉自己已经具备良好的专业技能基础的时候,但是有的时候还是会感觉和有的人有些差距,比如别人解个问题的时候就是效率高,当然一部分是经验的原因,或者是运气好,正好想到那个点了,也有一部分是别人的思路很清晰,逻辑思维能力强,分析定位问题的速度快,如果缺少的话最好是通过开发经验和良好的习惯慢慢的去提高。

   ~over~

你可能感兴趣的:(系统开发)