APP下载

基于Android平台的在线影院APP开发与设计

2021-05-07华春梦

现代信息科技 2021年21期
关键词:性能测试安卓高效

摘  要:在当下快节奏的移动互联网时代,智能手机和移动设备已不仅仅是一个通信工具,更成为人们利用碎片时间来学习、放松、娱乐的主要工具。针对目前市面上影院类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、机器学习、人工智能。

猜你喜欢

性能测试安卓高效
让iPhone变安卓,这是真的野
文物表情包
Hadoop性能测试自动化研究
提高提问的有效性, 构筑高效的语文课堂
打造务实、创新、高效的语文课堂
高校三维动画课程教学方法研究
关于Java软件的性能测试分析
学习安卓应用开发
安卓机器人