1. 程式人生 > >ImportNew Android App 從0到1

ImportNew Android App 從0到1

ImportNew是一個專注於 Java 相關技術分享的部落格,平常自己關注ImportNew比較多,曾經有想過自己開發一個客戶端出來,可以隨時隨地方便在移動裝置上閱讀,不過很多時候僅僅想想就過去了,但這次是玩真的,從零開始寫ImportNew客戶端,前後斷斷續續用業餘時間花了兩週多時間把Demo做了出來,實踐證明實現一個想法並沒有想象中的那麼難,主要問題還是太懶。

為什麼要做ImportNew Android客戶端

最早接觸Android還是在10年的時候,當時Nokia還是市場主流,周圍同學幾乎人手一臺Nokia,不過隔壁宿舍有個土豪買了個Android 系統的SumSang手機,那是第一次體驗到Android,那介面在當時絕對算得上驚豔,儘管那時還沒見過iPhone長啥樣。於是回宿舍後手癢癢地開始按照官方文件把開發環境搭建好開啟人生中第0個Android App------那個人盡皆知的Hello World,那時的開發工具和現在根本沒法比,開個模擬器比蝸牛還慢,此後就再也沒去折騰了。今天又重新拾起來,主要是因為我終於有了自己的第一臺Android手機(這樣裝逼或許會被打的),其實真正的初衷源於自己想做一款專屬健康管理App,因為大部分碼農從來都不在乎自己的身體健康。那麼問題來了,你的第1個App為什麼是ImportNew客戶端?其實ImportNew的前身就是前面提到的那個健康管理App。最開始畫了一個ListView出來,接著瞭解到Fragments的用法,看到Fragments的一個例子是左側列表Items,右側是某個Item的詳情,這讓我想到可以先做個ImportNew客戶端出來,於是就開幹了。 fragments

ImportNew技術細節

前後端分離,做各自擅長的事是一個應用程式延續生命力基本要素。客戶端所展示的資料均源自ImportNew網站,後端有專門的爬蟲,不定時爬取最新文章,通過提供Restful風格介面返回結構化文件給客戶端展示。

後端技術

爬蟲使用tornado.queues模組用協程的方式實現非同步的生產者/消費者模型,併發地爬取頁面。在單機環境下爬完整站所有文章在1分多鐘的時間,如果用普通Requests庫單執行緒模式則會花費30多分鐘。
crawler

後端介面使用Python/Tornado實現,資料庫直接使用Redis,這種比較簡單的客戶端用Redis簡直是絕配,文章列表用了SortedSet,文章詳情用Hash結構來表示,完全沒必要用MySQL。

前端技術

最開始做Demo的時候用ListView元件展示文章列表,自定義ViewHolder來儲存試圖引用提高ListView的滑動流暢度,後來發現有一個更高階的控制元件RecycleView用來替換ListView,RecyclerView是谷歌V7包下新增的控制元件,該控制元件預設實現了ViewHold模式。此外文章的詳細頁面用過好幾種方法,最開始直接傳遞一個url給Webview載入文章的詳細頁面,但這樣的實現方式顯然與直接用瀏覽器沒什麼區別。因此,後來接著把文章的詳細頁面資料也一同爬取到,此時Webview載入的一個文字。文章的樣式依然通過css控制,只不過Css是放在本地載入,而無需再通過WebView去遠端伺服器載入樣式檔案,這樣的方案可以提高頁面的響應速度。所有的網路請求用非同步載入庫Volley。 importnew

最後,感謝這個偉大的開源時代,讓學習變得更簡單。


關注公眾號「Python之禪」(id:vttalk)獲取最新文章 python之禪