


摘 ?要:在當下快節奏的移動互聯網時代,智能手機和移動設備已不僅僅是一個通信工具,更成為人們利用碎片時間來學習、放松、娛樂的主要工具。針對目前市面上影院類APP所涵蓋內容龐雜,廣告眾多以及啟動速度慢的問題,文章基于Android平臺,采用MVVM架構和多級緩存技術,設計開發了一款簡約版在線影院APP,通過性能測試,表明其運行穩定,具有一定的實用和推廣價值。
關鍵詞:安卓;在線影院;MVVM;高效;性能測試
中圖分類號:TP311.5 ? ? ?文獻標識碼:A文章編號:2096-4706(2021)21-0029-04
Abstract: In the current fast-paced mobile Internet era, smart phones and mobile devices are not only a communication tool, but also become the main tools for people to use fragmented time to learn, relax and entertain. Aiming at the problems of complex content, numerous advertisements and slow startup speed of cinema APP on the market, this paper designs and develops a simple online cinema APP based on Android platform, MVVM architecture and multi-level cache technology. The performance test shows that it runs stably and has a certain practical and popularization value.
Keywords: Android; online cinema; MVVM; efficient; performance test
0 ?引 ?言
在奔向2025全面小康的進程中,人們的物質和精神需求層次也隨之提高,其中表現之一就是電影事業的蓬勃發展[1],從2017年《戰狼2》到2021年的《長津湖》,都在不斷刷新中國電影票房紀錄,其中,在線影院類APP則起到了重要的宣傳作用。然而,有很多商家為了追求利益和流量,致使移動APP包羅萬象,內容雜亂無章,廣告繁多無度,進而導致用戶的交互體驗感不斷下降。相較于封閉的iOS操作系統,國內則更多是采用開源開放的Android系統平臺,基于此,本文以Android為核心,開發設計了一款簡約易用的在線影院APP,不但節約了人們瀏覽和搜索的時間,同時結合使用多級緩存技術和自定義控件技術,大大優化了用戶的交互體驗。
1 ?系統關鍵技術概述
1.1 ?Android系統架構
Android是一款基于Linux內核且遵循Apache協議的移動智能終端操作系統[2,3],如圖1所示,其自下而上可以分為四層結構:
(1)Linux Kernel驅動層。負責諸如顯示、觸摸、聲音等硬件相關的工作。
(2)硬件抽象層(Hardware Abstraction Layer, HAL),以動態庫的形式加載相關模塊,供上層API調用。
(3)Android Runtime核心運行庫和Native C/C++。提供Android應用的運行環境,同時提供NDK開發語言的支持,包含Sqlite輕量數據庫。
(4)Framework框架層。提供用戶開發的各種Java API,可以用于構建UI、訪問網絡等。
1.2 ?OkHttp與Retrofit網絡訪問
OkHttp是Square開源的輕量級網絡訪問框架,是對Android原生Http訪問的封裝,支持異步請求和Http緩存,大大提高了網絡訪問性能[4]。Retrofit同樣是Square公司開源的,它基于OkHttp,同時支持RESTful API,與其他網絡框架不同的是,它更多地通過運行時注解的方式來提供功能,可以配置不同的反序列化工具(如Json、Xml等)進行數據解析,具有很強的解耦能力。
1.3 ?Sqlite與Room數據庫
Sqlite是一個純C語言實現的關系型數據庫,通過Sqlite可以持久化存儲較為復雜的數據結構,但是使用純Sqlite對新手開發不太友好,上手的難度較高,需要借助大量的ContentValue對象為支撐,不符合典型數據訪問對象(Data Access Object, DAO)設計模式,故此,谷歌官方文檔中強烈建議以Room作為抽象層來訪問數據庫[5]。
Room包含3個主要組件:
(1)Database數據庫。即數據庫的持有者,作為應用訪問持久關系型數據底層連接的主要接入點,實現類要使用@Database注解,并且注解中要添加數據庫關聯的實體列表。
(2)Entity實體。表示數據庫中的表,表中的元素可以用@ColumnInfo來表示列名。
(3)DAO數據訪問對象。表示訪問數據庫的方法(如增、刪、改、查等),同樣,方法也使用注解來標識具體的作用。
應用使用Room數據庫來獲取與該數據庫關聯的數據訪問對象(DAO);然后,應用使用每個DAO從數據庫中獲取實體,對實體進行操作;最后,應用使用實體來獲取和設置與數據庫中的表列相對應的值。Room三大組件間的關系如圖2所示。
2 ?系統概要設計
2.1 ?系統架構設計
簡約版在線影院應用APP包含用戶中心、影院和電影三個主要模塊,各模塊之間相互解耦且分工明確。用戶中心主要負責展示用戶的自畫像和購票記錄;影院模塊展示附近影院的位置和優惠政策;電影模塊則展示近期熱映的電影信息。本文設計的在線影院APP系統架構如圖3所示,主要涉及軟件和邏輯兩個維度。
圖3(a)是系統的軟件架構,應用通過Http協議從服務器端讀取數據,然后利用Gson解析Json并將獲取的結果傳遞給業務層進行展示,最后加入三級緩存,Cache緩存、Room Sqlite數據庫存儲以及網絡云端緩存,實現用戶操作信息的持久化。
圖3(b)是系統的邏輯架構,遵循MVVM架構[6],目的是使APP各層次間盡量解耦,方便迭代和持續開發。本系統自上而下將APP的實現分為UI視圖層、數據訪問層和業務處理層,各層級的核心業務明確,層級間不存在復雜的關系,結構相對松散,故而可以多人協作同步開發,減少了維護成本。
本APP立足于UI視圖內容的展示,以數據訪問為核心,以業務封裝為關鍵,遵循簡約質樸的設計原則:
(1)UI視圖層。視圖層主要負責內容的展示和交互操作,用戶基于Android的開發框架,結合Activity和Fragment就可以繪制出相對美觀的界面,配合滑動、點擊等事件,完成交互式響應。
(2)數據訪問層。互聯網時代,可以說,數據是一把“金鑰匙”,沒有后臺數據,再好的交互也不可能實現。相較于Xml數據格式,Json以簡潔的層次關系,越來越受到開發者的青睞。本文的數據訪問層依托于Http請求和Json解析,在APP的內容展示上起到數據支撐的作用。
(3)業務處理層。遵循MVVM架構,以Model為數據實體,以View為UI視圖層,而ViewModel即為Model和UI綁定的關聯層。Model或View更新時,實時刷新對方,這便是業務處理層。ViewModel僅執行業務邏輯相關的工作,以適配器Adapter的形式提供數據綁定更新,同時引入三級緩存,將用戶的偏好和部分操作進行離線存檔。
2.2 ?界面框架設計
本設計遵循簡約美觀的原則,采用Android的碎片化Fragment和Activity作為視圖容器的承載體,兩者都可以定義和管理自己的布局,處理用戶輸入事件,有自己的生命周期。在界面設計中,引入自定義控件以及可縮放矢量圖(Scalable Vector Graphics, SVG)使UI元素能夠自適應、適配更多設備,同時減小了Apk的體積。
2.3 ?數據存儲設計
Android自帶的SharedPreference存儲只能存儲簡單的鍵值對,而寫入文件緩存也不能有效地實現結構化的增刪操作,故而對用戶的偏好操作需要采用數據庫來維護。本設計主要涉及兩張表,一個是用戶信息、一個是電影訂單詳情,表1展示了電影訂單的字段信息。
3 ?系統的實現
本應用使用三個Tab作為底部的導航欄,三大模塊統一用Fragment碎片化的方案實現。用戶中心主要展示用戶信息和用戶畫像,影院模塊負責附近影院信息的展示,而電影模塊則負責當下熱映的電影圖文和音頻視頻的展示。本APP的最終實現效果以及交互時序如圖4所示,下面將分別對各個功能的詳細設計和實現方案進行介紹。
3.1 ?用戶中心設計與實現
用戶中心采用簡單的線性布局和自定義控件來實現,圖標多使用SVG矢量圖轉換后的Xml來替代傳統的png,這樣就可以在Xml中靈活自如地對其顏色和大小進行更改,且可以保持良好的彈性形變。其中自定義圓形用戶畫像的控件需要重點實現onDraw繪制的方法,此方法的兩個核心是畫筆和畫布[7]。“我的訂單”則是通過Room讀取用戶的購票記錄,然后以列表的形式進行展示。
3.2 ?影院模塊功能設計與實現
影院模塊的信息展示采用RecyclerView組件配合適配器(Adapter)的設計模式。首先,在頁面視圖創建的生命周期中,通過異步線程完成服務器端的Http網絡請求;其次,利用GSON將此數據解析為Java Bean對象;最后,將此Java Bean數據中的有效信息進行封裝并傳入適配器以完成數據和視圖的綁定更新。整個網絡訪問及數據解析和視圖綁定流程如圖4(a)所示,然而,考慮到影院信息變化不頻繁,我們會將成功的請求內容寫入臨時的Cache緩存,以方便下一次的離線更新,一方面節省了用戶流量,另一方面則加快了頁面的響應速度。
3.3 ?電影模塊功能設計與實現
電影模塊相比影院純文字的描述,多了圖片和視頻的參與,但總體的數據請求和視圖綁定流程是一致的,二者都遵循MVVM高內聚低耦合的設計模式。針對影片的圖像加載,本文使用了Glide第三方庫,它支持動態加載和異步更新,同時還具備離線緩存技術,極大地提升了用戶的交互體驗,電影預告片的播放使用了Android原生的MediaPlayer和SurfaceView技術,影片的播放進度更新使用了Timer定時器來實現。在電影的播放頁面,用戶可以選擇影票的購買,此時系統會利用Room數據庫,保存用戶的購買記錄,以便用戶可在用戶中心的訂單中進行查詢。
(a)在線影院和電影頁面的交互時序
經過代碼的編寫,最終實現的簡約在線影院APP效果如圖4(b)所示。
4 ?測試
通過Profiler工具對在線影院進行一定時間的性能測試,得出的結果如圖5所示。從圖中我們可以得出以下結論:(1)測試結果包含三大核心模塊,即Cinema(影院)、Movie(電影)、User(用戶中心);(2)CPU、內存及網絡在非網絡訪問狀態下,基本都處于空閑狀態;(3)只有當播放在線視頻時,伴隨著網絡流量的消耗,CPU的負載才會出現持續的小幅波動,內存同樣會經歷一段時間的上升,但都維持在中等以下,基本符合預期。
5 ?結 ?論
本文利用Android平臺的相關技術,基于MVVM框架開發了一款簡約的在線影院APP,可以使人們免除廣告干擾,快速查看及訂閱感興趣的電影,通過Cache緩存和Room數據存儲實現多級緩存,既避免了重復網絡內容的多次請求,又加快了應用的響應時間。引入自定義控件,美化了APP的外觀,經過性能測試和壓力測試得出,APP運行穩定,交互靈敏,達到了預期的設計目標,具有一定的實用價值。
參考文獻:
[1] 周程帆,王貴鑫.基于Android平臺的影院票務管理系統的設計與實現 [J].科學技術創新,2019(32):62-64.
[2] 張蕾.基于Android的短視頻制作分享平臺的設計與實現 [D].北京:北京交通大學,2021.
[3]李剛.瘋狂 Android 講義:第2版 [M].北京:電子工業出版社,2014.
[4] 楊錳.基于Android平臺的新聞客戶端的設計與實現 [D].北京:北京郵電大學,2021.
[5] 熊艷秋.基于Android平臺在線視頻播放APP的設計與實現 [D].荊州:長江大學,2020.
[6] 崔慧娟.MVVM模式在Android項目中的應用 [J].信息與電腦(理論版),2021,33(6):1-3.
[7] 許艦.Android自定義繪圖組件的設計與實現 [J].電腦知識與技術,2018,14(10):95-98.
作者簡介:華春夢(1990.04—),男,漢族,河南南陽人,助教,碩士研究生,研究方向:嵌入式Linux、機器學習、人工智能。