SNG迷你项目感悟
来腾讯实习有半个月来,刚进来公司统一培训了一天半,闲扯了点东西。然后SNG部门培训了3天时间,讲解一些业务流程。然后就是重头戏,所谓的迷你项目。我擦,虽然今天做完了,但是我还是想说这个巨坑啊!
做这个迷你项目首先要说的是,还真的有点累的。。。每天早上做班车从酒店到公司,然后晚上一边九点走,到最后两天就更夸张了。前天在公司通宵了一夜,昨天夜里也是十二点多才走,欣慰的是腾大东侧的路上出租车排排停,估计我鹅长的员工加班都很积极吧。一个安卓应用,7天时间,两个人做,看这数据都觉得恐怖。
不过最后还是搞定了,尽管没拿奖,但是自己仍然很有成就感。做项目期间还是受到导师同事们的很大帮助的。最后一晚要不是wii帮qiuhang调了一个多小时的bug估计就得继续通宵了,而且说不定通宵了也搞不,那就苦逼了。
因为我做和服务器端的接口工作,当时一边商量一边改。一开始觉得商量接口真麻烦,后来才发现没有事先定义好接口才是做苦逼的。最荒唐的一件事是今天上午mini项目要测评了,结果昨天下午还在找后台的同学加接口。所以说: > 概要设计真的很重要
前天晚上的问题是在电脑上调试完毕的net接口整合到Android上却得不到返回数据,比较奇怪的是有一个房屋信息POST请求能上传,而且数据库里会出现相应信息,但是返回值却是空的。一开始怀疑是没有申请网络访问权限,后来发现不是。后来sponsor Lewis 过来帮我调试,教了我安卓单步调试的方法,但是问题还是没能轻松解决。当天晚上熬了一夜,睡醒了4点,突然灵机一现决定把所有的JSON返回值都Log出来,同时所有的Exeption也要Log出来。后来慢慢调试才发现是NetworkOnMainThreadException
!网络跑在主UI线程!所以每次执行到connect的时候android系统都会抛出这个异常,但是我却Too young, sometimes too naive!把所有可能抛出异常的地方都catch (Exception e) {}。就是说catch了所有Exception的父类并且什么也不做!对!就是不作为!后来跟我的导师raez说这件事,他说:
异常本来是用来发现问题的,不能随便catch。
对此我的理解是,需要catch一个exception的时候尽量精准catch。比如一个方法可能抛出IOException就不要懒懒的去直接catch Exception,同时如果抛出多种异常也要一个一个catch;
1 2 3 4 5 6 7 8 9 |
|
同时捕获一个异常之后不能什么都不做,至少应该printStackTrace
或者是Log出来,否则出现问题之后很难排查出来。另外NullPointerException
原则上不允许catch,OutOfMemoryError
除了在大量消耗内存的代码片段上(比图图片处理,或者字符串拼接等)不允许catch。还有就是捕获异常是一定精准捕获。
另外关于安卓多线程的使用,学习到了两种方式:Activity的runOnUiThread(Runnable)
方法,还有使用AsyncTask类, 另外还有是用Handler之类的方法,当时没有还没有学习。
另外一方面是缺少大型软开发的经验,原来自己写过的代码,最多也就一两千行。导致我们缺乏大型软件框架方面的知识。mini项目的Android端事实上来说就分了两个部分,UI和后台。今天听Wii讲了我们组的项目的大致构架,各个模块的分工功能,模块之间怎么通信回调,瞬间觉得高达上!真的是很开眼界。