(本博客爲原創:http://www.cnblogs.com/linguanh/)php
前言:html
這算是個人第一個 完徹底全 由本身開發的
社交類安卓APP
,截止2016-7-15,第二版本的優化完善已順利完成,能夠正常使用。下面我將一 一講述各個點,往後若是不上線,那麼將考慮全面開源,含移動端代碼、服務器接口代碼,留意個人 GitHub。java因爲內容十分地多,我盡我本身的能力將各個功能模塊的作法儘量地去講清楚,歡迎留言,有問必復,文章會不斷更新,下面全部談及的功能皆已實現。android
一 、功能架構
git
二 、移動端架構概述github
3、服務端架構概述web
敏感詞檢索
,例如髒話內容佈局各不相同
) 說實話,這個項目的文件夾已達1.5G,安裝包混淆編譯後27M,我在寫以前,就在想要怎麼把它攤開來說,想一想真的很複雜,腦子東西東西太多。sql
static final int/String
或 65535限制,在使用框架的時不少時候,都是隻使用其中的一個功能。 只保留了一個
,不包括第三方SDK,例如OneKeyShare,保留的是 imageLoader
,保留它的緣由是,它的功能就是顯示圖片,而對於圖片這類數據,能夠說是佔內存最大的大頭,我能力有限,暫時還不能利用系統庫封裝好個比imageLoader更好的庫,同類的庫還有 picasso、fresco、volley等,曾經也引入過 fresco,比imageLoader多了不少API,考慮到框架的成熟性最後沒使用,volley就不只僅是顯示個圖片那麼簡單了,還有網絡請求,上傳等,網絡請求和上傳的代碼這部分由於我本身可以寫出還不錯的幾個函數,因此爲了減小沒必要要的消耗,沒使用volley。網絡請求和上傳的代碼這部分
,若是本身封裝好,且封裝得不錯,就不須要再去使用框架。視頻播放器數據庫
原生json
輕量級
) 重量級
) 網頁
我最終的選擇
因爲我網絡請求這塊沒使用框架,因此線程的選用時 Thread + Handler
組合或 AsyncTask
,須要明確一點,AsyncTask 比 Thread + Handler 更耗資源,不過使用起來比較方便。
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,致命的缺點是內存消耗不合理。
代碼結構
帖子的類型有三種
,這三種帖子除了內容部分佈局不同,評論佈局是同樣的,分享、刪除等按鈕也是同樣的,固然,也能夠本身經過接口改變評論佈局。因此在類的集成方面,我採用了三個抽象類父類
,子類只須要傳進入本身佈局、實現評論數據適配器 Adapter 便可。 邏輯
佈局
採用的佈局是 HeaderView + CommentView,HeaderView 用於顯示帖子的全部內容含帖子點贊,CommentView 用來顯示用戶的評論
消息提醒採用了極光推送的SDK實現
收藏、刪除、舉報,這些操做進行一次get操做,傳遞帖子的id給服務器,服務器處理完畢後,就作對應操做
其餘功能能的實現基本同上述。
第三方
本身派生
第二部分結束得有點匆忙,
我真的很想把全部的東西都寫下來
,若是加上我一路遇到過的 bug 及其解決方法,估計還要寫兩天。主要緣由是,有不少我記得已經不是太清楚了。
最初的我並無採用 InnoDB,而是全部表都是所有是 MyISAM 。改用的緣由是MyISAM 不支持事務InnoDB支持事務,並且社交類APP的數據庫操做過多偏向於insert
、update
、delete
這種操做若是涉及多表或單表互聯操做的狀況,爲了不數據寫髒,因此使用事務。由於整個過程當中若一條錯誤,即可以回滾到開始時的狀態。
寫操做
的表採用InnoDB引擎 對於數據庫設計,不該該過多依賴範式,適度的冗餘
能夠加快搜索速度,在服務器的配置還能夠的狀況下,能夠採用冗餘來解決查找慢的問題。
常被 update
的字段,不該該出如今多張表,應該使用一張表,例如用戶的名稱,userName 這個確定是會被常常改變的。不然在update數據的時候你要多張表更新!