热门
(本博客为原创:http://www.cnblogs.com/linguanh/)
前言: 这算是我的第一个 完完全全 由自己开发的社交类安卓APP,截止2016-7-15,第二版本的优化完善已顺利完成,可以正常使用。下面我将一 一讲述各个点,日后如果不上线,那么将考虑全面开源,含移动端代码、服务器接口代码,留意我的 GitHub。 由于内容十分地多,我尽我自己的能力将各个功能模块的做法尽可能地去讲清楚,欢迎留言,有问必复,文章会不断更新,下面所有谈及的功能皆已实现。
前言:
这算是我的第一个 完完全全 由自己开发的社交类安卓APP,截止2016-7-15,第二版本的优化完善已顺利完成,可以正常使用。下面我将一 一讲述各个点,日后如果不上线,那么将考虑全面开源,含移动端代码、服务器接口代码,留意我的 GitHub。
社交类安卓APP
由于内容十分地多,我尽我自己的能力将各个功能模块的做法尽可能地去讲清楚,欢迎留言,有问必复,文章会不断更新,下面所有谈及的功能皆已实现。
一 、功能架构
二 、移动端架构概述
三、服务端架构概述
敏感词检索
内容布局各不相同
说实话,这个项目的文件夹已达1.5G,安装包混淆编译后27M,我在写之前,就在想要怎么把它摊开来讲,想想真的很复杂,脑子东西东西太多。
static final int/String
只保留了一个
保留的是 imageLoader
网络请求和上传的代码这部分
视频播放器
原生
轻量级
重量级
网页
我最终的选择
由于我网络请求这块没使用框架,所以线程的选用时 Thread + Handler 组合或 AsyncTask ,需要明确一点,AsyncTask 比 Thread + Handler 更耗资源,不过使用起来比较方便。
Thread + Handler
AsyncTask
Android 的数据存储方式有5种,分别是 SharedPrefrences、File、SQLite、ContentProvider、NetWork。我采用的是 SharedPrefrences 和 File即是文件存储,其中
加载 全部是自己基于 HttpUrlConnection 封装的工具类。
逻辑
帖子分享,我采用的 OneKeyShare SDK,之所以使用它,是因为它把绝大部分的平台的SDK分享接口都集成了,例如微信、QQ、QQ空间、新浪微博、知乎等等等等。
手机登录
第三方登录
编辑
文字部分
内容过滤 要过滤掉某些敏感词,防止色情或其他内容出现
用户位置获取 使用百度地图API
图片部分
鉴黄图,这是最重要的
视频录制
上传
线程池
选用了安卓5.0 的 SwipeRefreshLayout + RecyclerView,原因是 SwipeRefreshLayout 自身带有下拉刷新,最早的时候使用的是 PullToRefresh 开源项目。RecyclerView 重写onScroll() 就可以搞定加载更多,还有一个原因,RecyclerView 自带有瀑布流布局属性。 早之前我使用的是 LinearLayout 实现的,不断地 addView 再 remove,致命的缺点是内存消耗不合理。
代码结构
帖子的类型有三种
三个抽象类父类
布局
采用的布局是 HeaderView + CommentView,HeaderView 用于显示帖子的所有内容含帖子点赞,CommentView 用来显示用户的评论
消息提醒采用了极光推送的SDK实现
收藏、删除、举报,这些操作进行一次get操作,传递帖子的id给服务器,服务器处理完毕后,就做对应操作
其他功能能的实现基本同上述。
第三方
自己派生
第二部分结束得有点匆忙,我真的很想把所有的东西都写下来,如果加上我一路遇到过的 bug 及其解决方法,估计还要写两天。主要原因是,有很多我记得已经不是太清楚了。
我真的很想把所有的东西都写下来
最初的我并没有采用 InnoDB,而是所有表都是全部是 MyISAM 。改用的原因是MyISAM 不支持事务InnoDB支持事务,而且社交类APP的数据库操作过多偏向于insert、update、delete 这种操作如果涉及多表或单表互联操作的情况,为了避免数据写脏,所以使用事务。因为整个过程中若一条错误,便可以回滚到开始时的状态。
insert
update
delete
写操作
对于数据库设计,不应该过多依赖范式,适度的冗余可以加快搜索速度,在服务器的配置还可以的情况下,可以采用冗余来解决查找慢的问题。
适度的冗余
常被 update 的字段,不应该出现在多张表,应该使用一张表,例如用户的名称,userName 这个肯定是会被经常改变的。否则在update数据的时候你要多张表更新!