最近在准备面试,很多都谈到项目经验。所以重新回顾半年前写的一个app,这个项目是之前参加一次移动端比赛时完成的,当时总共花了两个月时间完成+修改。但是由于当时比较懒,写完就扔一边了,没有总结经验,而且有些bug也没有解决。现在来完成这项工作。
功能介绍
这个app主要功能是记录用户的心情和计划,信息会以钉子的形式钉在墙上。心情可以选择是否公开和匿名。用户可以查看别人公开的心情。
主界面
上面是用的banner轮播库,加号按钮是一个菜单(用的别人的库),下面两个模块是当日使用情况,点击可以查看具体图表。
-
发布心情和计划
心情墙
计划墙
新建一个钉子把它拖到任意位置,用锤子钉下就可以编辑信息了。可以随时查看详细。心情钉子可以选择公开和匿名。信息会保存在服务器端上。
这两个界面用viewpage+fragment实现。
-
查看别人公开发布的心情
评论墙
随机抽取数据库里5条记录显示,只有厄运钉子长按可以评论。
UI是用的github上的框架。用别人的只是因为自己写的太丑了。。。重构的时候会重新写的。
-
统计信息图表显示
统计图表
用AChartEngine图表库实现。
-
背包功能,查看之前发布的记录
背包
这里用ExpandListView实现的,它是Listview的子类,可以实现二级列表。
整个项目用的MVP架构,网络请求使用OKhttp。
目标
重新学习这个项目有两个目的,重构代码和性能优化
重构
其实之前写完这个项目扔一边去,主要是因为觉得自己写的很垃圾,想优化又有一种无从下手的感觉。说一下我觉得不大好的地方。有些是已完成的,一些是计划完成的。
- Activity过于臃肿
这个问题当时写项目的时候就感觉到了,最开始用的MVC,之后就改成MVP了。虽然用MVP类接口多了一些,但是结构确实清晰了很多。再者就是抽取基类,比如 显示正在加载 显示toast 一些初始化绑定操作都是一样的。这样可以减少很多重复代码。 - 类功能过多
比如model层负责网络请求和数据库存储两个部分。个人感觉network和database分开比较好。 - okhttp + handler代码过于繁琐
每次写网络请求都是activity里定义4 5个网络请求状态常量,一堆sendMessage,然后handleMessage里一堆case分支。其实主要是因为okhttp异步请求在子线程里,必须手动编写handler来切换线程。
后来,我了解到了retrofit + rxJava......后来都用这俩完成网络请求。不得不说,不用手动切换线程和手动解析json真的是太太太方便了!!!
性能优化
性能优化这方面暂时了解不多,大致思路是检测+定位+优化。涉及到一些工具的使用。这些会慢慢去学习的。
我的想法是从下面四个方面来入手。
- 减小安装包apk体积
- 减小运行内存
- 减小流量使用
- 提高用户体验
下一篇是讲具体如何完成的。
网友评论