1. 引言
随着全世界信息产业的高速发展,智能手机早已是人们生活中不可或缺的一部分,而手机桌面作为用户与手机界面交互最直观的组成部分,一张精美的手机桌面壁纸能给使用者带来新鲜感和特别的用户体验,甚至会影响使用者当时的心情。但是由于普通的静态桌面相对单调枯燥,缺乏动感,而目前应用市场上有关动态壁纸的软件又比较杂乱且资源较少,做的内容较丰富的软件,占用内存较大,耗电量也较高。因此,设计出一款低功耗、高性能且资源丰富的动态桌面软件具有很强的现实意义。
Android是一种主要使用于移动设备的基于Linux的自由及开放源代码的操作系统 [1] [2] [3] ,由于该系统的开放特性,Android占据了大半部分的全球手机市场。同时安卓的开发性能吸引众多制造厂商加入这个阵营,生产出各种各样丰富多彩的安卓智能终端,再加上他们之间的竞争性,用户能够以较低的价格购买到喜欢类型的安卓智能端。
PHP的全称是超文本预处理器,是一款主要应用于Web开发领域的开源脚本语言 [4] [5] 。PHP语言具备独特的语法特征,方便初学者学习使用;更快的动态网页加载执行速度,提升用户浏览网页的体验感。同时,PHP语言还具有多功能特性、可扩展性和开放性,使得网页开发变得更加便捷。
为解决以上问题,本文采用MVP模式 [3] 设计客户端,PHP与MySQL [6] [7] [8] 实现服务端,并结合OkHttp [9] 优化网络传输的方案,实现一款既能够给用户提供大量资源选择,又可以降低手机内存和电量的消耗,同时给用户良好体验的安卓动态桌面APP。
2. 系统总体设计
动态桌面APP的设计目标是为用户提供动态桌面壁纸的功能,同时也有其他附属功能,包含图片壁纸的使用以及下载。主界面主要包括四个部分:心情签名,在线视频,每日图片,图片分类。另外小功能包括:本地视频文件搜索,下载文件浏览,下载图片浏览,帮助界面。
用户具有在线查看视频的功能,以及下载该视频,同时将该视频用于桌面。每日心情签名界面,每次进入,后台从服务器请求最新的三条数据,最后展示在界面中,动态桌面功能结构如图1所示。
2.1. 基于MVP模式下的系统框架设计
MVP 全称: Model-View-Presenter,MVP是从经典的模式MVC演变而来 [3] [10] 。在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,Presenter属于MVC开发模式中Activity中的界面层与控制层抽离出来的一层,具有高度解耦性。
根据系统总体设计思想,首先部署好服务器和数据系统,然后采用MVP架构进行APP的详细设计。MVP设计的软件,其每个功能界面都有各自的请求流程,图2为总体处理流程。
2.2. 基于OkHttp技术的网络框架设计
OkHttp是Android端最受开发者喜欢的轻量级高效网络框架 [9] ,它允许连接到同一个主机地址的所有请求,提高请求效率;通过共享Socket策略,减少对服务器的请求次数;利用连接池,减少请求延迟;依靠透明的GZIP压缩减少响应数据的大小;缓存响应数据,减少重复的网络请求,减少对数据流量的消耗。本文采用OkHttp设计的网络框架如图3所示。
![](//html.hanspub.org/file/1-1541174x9_hanspub.png)
Figure 1. Dynamic desktop functional structure
图1. 动态桌面功能结构
![](//html.hanspub.org/file/1-1541174x10_hanspub.png)
Figure 2. System overall processing flow chart
图2. 系统总体处理流程图
![](//html.hanspub.org/file/1-1541174x11_hanspub.png)
Figure 3. System network framework diagram
图3. 系统网络框架图
3. 数据库设计
动态桌面APP需要对视频或动画进行保存,根据动态桌面APP的功能需求,在实现功能的同时为达到系统升级和扩展的需要,本文选用MySQL作为系统数据库。
MySQL是一款使用标准化数据查询语言的关系型数据库管理系统 [7] [8] ,它将关系数据库将数据保存在不同的表中,增加了数据处理速度并提高了数据管理灵活性。依据本文设计需求,数据表设计如下(图4)。
用户信息表(user):存储用户基本信息,用于验证用户合法性以及记录用户的所属类型。
心情签名表(mood):存储心情的基本信息,包括心情发表的日期、作者、封面、内容、评论数等必要信息。
在线视频表(yoyo_video):存储在线视频信息,包括视频的类型、大小、日期、封面、源文件路径等必要信息。
在线图片表(yoyo_pic):存储在线图片信息,包括图片的类型、下载路径等必要信息。
4. 系统关键技术设计与实现
4.1. OkHttp + MVP + PHP + MySql + JSON开发模式
由OkHttp + MVP两个框架实现的软件架构,其流程一般非常明确,框架流程如图5所示。主要包括五步:
Step 1:View显示刷新界面,通知Presenter获取数据,Presenter调用Model变量从后台获取数据;
Step 2:Model使用OkHttp网络连接类,当提交数据时发送POST请求,当请求数据时发送GET请求,发给服务器的PHP文件;
Step 3:PHP文件连接数据库,并根据Model传送过来的值从数据库中获取相应的数据,转化成Json字符串,返回给Model;
Step 4:Model获取数据成功后,Presenter通知View获取成功;
Step 5:View隐藏刷新按钮,显示数据。
使用封装好的OkHttp类能够更及时高效的进行网络连接,以及网络数据传输,而不需要开发者去了解HTTP协议 [11] ;同时MVP的使用使得每个类都拥有自己独立的职能,便于后期维护与修改,同时PHP是运行在服务器端的语言,数据更安全可靠,也保护了MySql数据库。各个组建承担各自责任,各司其职,提高整体软件的效率,便于后期维护与更新。
4.2. 动态桌面制作
4.2.1. 动态视频预处理
动态桌面的主要功能是加载动态视频。加载之前需要对视频进行制作预处理。动态视频的预处理流程如图6所示。
动态视频制作的整个过程可概括为三个主要步骤:
1) 获取源视频资源
动态桌面APP 软件采用的视频、图片资源主要来自网络资源,有些来自领域内的自主设计或用户提供的图片。
2) 剪辑源视频
对获取的视频、图像资源通过相应的软件加工工具做一些处理,例如视频的加工剪辑使用的是Adobe After Effect CC (简称AE),通过此软件可以对视频进行删减,最后得到想要的那一部分,有的时候尺寸偏差比较大,或者色调不鲜艳,都可以通过AE做相应的处理与加工,便可得到色调、尺寸符合要求的视频。图像处理采用的是Photoshop,选择感兴趣区域的图片进行裁剪美化。
3) 视频压缩转换
然而经过AE处理的视频内存占用非常大,不合适网络传输,同时也会影响用户的下载体验,浪费用户流量与实践,因而最后一个步骤便是对加工处理后的视频进行压缩、格式转换,从而得到内存小、高清的、适合网络传输的视频。
4.2.2. 视频加载为桌面
制作好合适的动态视频后,就要利用APP进行动态加载。安卓提供了桌面加载的服务类WallpaperService [12] ,通过继承这个系统类,重写类中onCreateEngine()方法,并且定义一个Engine内部类,便可实现安卓动态桌面引擎,所有的动态桌面效果实现都需要依靠这个引擎。在这个引擎中可以自定义一些通过功能,例如音量的大小调节,视频的默认声音是否关闭,视频是否重复播放等功能。
1) 设置视频为动态桌面
public void setDynamicWallPaper(Context context){
final Intent intent =
new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
new ComponentName(context,DynamicWall.class));
context.startActivity(intent);}
用户可以自己选择是否开启动态桌面的声音,这时候需要定义两个方法:
2) 设置静音
public static void voiceSilence(Context context) {
Intent intent = new Intent(DynamicWall.VEDIO_PARAMS_CONTROL_ACTION);
intent.putExtra(DynamicWall.KEY_ACTION, DynamicWall.ACTION_VOICE_SILENCE);
context.sendBroadcast(intent);}
3) 设置正常音量
public static voidvoiceNormal(Context context) {
Intent intent = new Intent(DynamicWall.VEDIO_PARAMS_CONTROL_ACTION);
intent.putExtra(DynamicWall.KEY_ACTION, DynamicWall.ACTION_VOICE_NORMAL);
context.sendBroadcast(intent);}
4.3. 基于观察者模式的模糊查询
模糊查询的实现,通过用户的输入来实现搜索功能,创建一个文本框的监听器,每当用户的输入值发生变化的时就执行搜索功能,凡是字段中存在的字符都会在搜索结果内,模糊查询的搜索功能如图7所示。
搜索使用的关键技术为“观察者模式” [13] [14] ,观察的对象是用户的输入内容,观察者便是后台监听器,时刻观察用户输入,从而进行搜索显示。整个流程可分为五个步骤:
Step 1:创建一个输入框的被观察对象
createTextChangeObservable(final EditTextetContent);
Step 2:创建监听对象(观察者)
final TextWatcher watch = new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count){e.onNext(s.toString());}
Step 3:绑定监听
etContent.addTextChangedListener(watch);
Step 4:过滤字符串
observable.debounce(1000, TimeUnit.MILLISECONDS);
Step 5:返回数据
return observable.debounce(1000, TimeUnit.MILLISECONDS);
通过以上五步完成模糊查询的搜索功能。
![](//html.hanspub.org/file/1-1541174x15_hanspub.png)
Figure 7. Search function of fuzzy query
图7. 模糊查询的搜索功能
5. 系统实现与测试
5.1. 系统实现界面展示
依据系统总体设计和关键技术实现原理,系统在Linux服务器下采用MySQL + Apache + ThinkPHP框架实现,在客户端采用OkHttp + MVP框架实现。在服务器已经启动的情况下,运行安卓动态桌面软件,部分运行界面如图8~13所示。
5.2. 系统测试
软件测试是软件开发过程中必不可少的一部分,是软件投入实际运营前非常重要的一个环节,其目的是确认软件各个功能,性能,等是否符合开发前制定的要求,是否有好的用户体验,在事先计划的规定中,按照一系列要求程序,一步步来操作,从而发现某些隐含的错误,同时还会对软件进行相关功能评估,判断其是否满足事先做的设计需求。
5.2.1. 模块测试
1) 程序模块:分别测试启动开屏模块、首页有网络与无网络显示、在线视频播放、在线图片浏览、分页浏览、心情签名模块、本地视频搜索、视频预览等程序模块。
2) 数据模块:分别测试添加不同数据,包括视频,图片,心情签名等模块的数据,在大量数据的情况下了解软件的运行情况。
3) 文件模块:分别测试视频文件,图片文件,大文件,小文件,以及各种格式文件对软件运行产生的影响,在文件比较大的情况,测试出软件体验是否良好,以及软件自身运行状况。
5.2.2. 性能测试
1) 兼容性:分别选择不同安卓系统的不同品牌手机测试动态桌面实际运行状况。具体测试条件如表1测试数据所示。
2) 稳定性:将软件上线到腾讯应用宝,通过真实的用户数据测试系统的稳定性。应用宝真实数据如图14所示。
![](//html.hanspub.org/file/1-1541174x22_hanspub.png)
Figure 14. YingyongBao real data (2018-10-10)
图14. 应用宝真实数据(2018-10-10)
![](Images/Table_Tmp.jpg)
Table 1. Test phone description list
表1. 测试手机说明列表
5.2.3. 测试结论
经过反复的严格测试,最终得到以下测试结论:
1) 软件在功能、性能、用户体验上基本满足系统在分析阶段所列的各个要求;
2) 服务器在各种不同文件的情况下能顺利传输数据到手机端,同时手机端也能顺利接收;
3) 软件在所有测试手机上均可以流畅运行,所有模块均无异常报错,兼容Android5.0以上各版本系统;
4) 根据应用宝真实用户数据验证软件具备较好稳定性;
5) 服务器在带宽传输速度上略有不足,不能快速传输到用户端。
6. 结论
动态桌面APP软件实现了视频、图片为手机桌面的两大主要功能,还添加了“每日心情”的新颖功能,给用户不一样的体验。该APP解决了静态壁纸应用给用户体验较差,动态壁纸应用安装包较大,动态资源较少等诸多问题,提供了一款具备丰富的在线资源、便捷的操作界面、简洁的物料设计等特点的轻量级动态壁纸应用。