安卓动态桌面设计与实现
Android Dynamic Desktop Design and Implementation
DOI: 10.12677/CSA.2018.810162, PDF, HTML, XML, 下载: 994  浏览: 5,565 
作者: 谭 敏, 周 新, 兰 红:江西理工大学信息工程学院,江西 赣州
关键词: 动态桌面MVP设计模式OkHttp框架TP5框架RxJavaRxAndroid观察者模式Dynamic Desktop MVP Design Pattern OkHttp Framework TP5 Framework RxJava RxAndroid Observer Mode
摘要: 为解决目前应用市场上常见的Android手机桌面应用存在的诸多问题,本文采用MV架构设计,Android + PHP + MySql结合,设计实现一款动态桌面APP。前端采用物料设计 + 沉浸式体验进行页面布局设计,用户界面展现良好的视觉效果;后台采用云端服务器,架构设计对于数据的请求处理更加迅速。当安卓端发送POST、GET请求时,服务器中的PHP文件担当着桥梁的作用,一方面可以连接访问服务器数据库,另一方面处理安卓端的验证、登录、请求、保存等请求,然后返回数据给安卓端用于用户交互。动态桌面APP通过自身界面的独特设计优化了浏览,搜索,下载等操作,基于OKHttp与MVP架构的设计使得该软件数据请求处理能力更加迅速,对于逻辑处理代码的优化减小了软件安装包的大小,提供良好的用户体验。
Abstract: In order to solve the problems existing in the Android mobile phone desktop in the current application market, this paper uses MV architecture design, Android + PHP + MySql combination to design and implement a dynamic desktop APP. The front end adopts material design + immersive experience for page layout design, and the user interface displays good visual effects; the background server adopts cloud server, and the architecture design processes data requests more quickly. When the Android side sends the POST and GET request, the PHP file in the server acts as a bridge. On one hand, it can connect to the server database, on the other hand, it can process the authentication, login, request, save, etc. of the Android side, and then return the data to Android. End for user interaction. The dynamic desktop APP optimizes the browsing, searching, downloading and other operations through the unique design of its own interface. The design of the OKHttp and MVP architecture makes the processing capability of the software data request more rapid, and the optimization of the logical processing code reduces the size of the software installation package for users with good user experience.
文章引用:谭敏, 周新, 兰红. 安卓动态桌面设计与实现[J]. 计算机科学与应用, 2018, 8(10): 1491-1502. https://doi.org/10.12677/CSA.2018.810162

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所示。

Figure 1. Dynamic desktop functional structure

图1. 动态桌面功能结构

Figure 2. System overall processing flow chart

图2. 系统总体处理流程图

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隐藏刷新按钮,显示数据。

Figure 4. Database schema diagram

图4. 数据库模式图

Figure 5. Framework process

图5. 框架流程

使用封装好的OkHttp类能够更及时高效的进行网络连接,以及网络数据传输,而不需要开发者去了解HTTP协议 [11] ;同时MVP的使用使得每个类都拥有自己独立的职能,便于后期维护与修改,同时PHP是运行在服务器端的语言,数据更安全可靠,也保护了MySql数据库。各个组建承担各自责任,各司其职,提高整体软件的效率,便于后期维护与更新。

4.2. 动态桌面制作

4.2.1. 动态视频预处理

动态桌面的主要功能是加载动态视频。加载之前需要对视频进行制作预处理。动态视频的预处理流程如图6所示。

动态视频制作的整个过程可概括为三个主要步骤:

1) 获取源视频资源

动态桌面APP 软件采用的视频、图片资源主要来自网络资源,有些来自领域内的自主设计或用户提供的图片。

2) 剪辑源视频

Figure 6. Dynamic video preprocessing

图6. 动态视频预处理

对获取的视频、图像资源通过相应的软件加工工具做一些处理,例如视频的加工剪辑使用的是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);

通过以上五步完成模糊查询的搜索功能。

Figure 7. Search function of fuzzy query

图7. 模糊查询的搜索功能

5. 系统实现与测试

5.1. 系统实现界面展示

依据系统总体设计和关键技术实现原理,系统在Linux服务器下采用MySQL + Apache + ThinkPHP框架实现,在客户端采用OkHttp + MVP框架实现。在服务器已经启动的情况下,运行安卓动态桌面软件,部分运行界面如图8~13所示。

Figure 8. Mood signature interface

图8. 心情签名界面

Figure 9. Online video interface

图9. 在线视频界面

Figure 10. Daily photo interface

图10. 每日图片界面

Figure 11. Picture of the picture interface

图11. 分类图片界面

Figure 12. Drawer layout menu interface

图12. 抽屉布局菜单界面

Figure 13. Help interface

图13. 帮助界面

5.2. 系统测试

软件测试是软件开发过程中必不可少的一部分,是软件投入实际运营前非常重要的一个环节,其目的是确认软件各个功能,性能,等是否符合开发前制定的要求,是否有好的用户体验,在事先计划的规定中,按照一系列要求程序,一步步来操作,从而发现某些隐含的错误,同时还会对软件进行相关功能评估,判断其是否满足事先做的设计需求。

5.2.1. 模块测试

1) 程序模块:分别测试启动开屏模块、首页有网络与无网络显示、在线视频播放、在线图片浏览、分页浏览、心情签名模块、本地视频搜索、视频预览等程序模块。

2) 数据模块:分别测试添加不同数据,包括视频,图片,心情签名等模块的数据,在大量数据的情况下了解软件的运行情况。

3) 文件模块:分别测试视频文件,图片文件,大文件,小文件,以及各种格式文件对软件运行产生的影响,在文件比较大的情况,测试出软件体验是否良好,以及软件自身运行状况。

5.2.2. 性能测试

1) 兼容性:分别选择不同安卓系统的不同品牌手机测试动态桌面实际运行状况。具体测试条件如表1测试数据所示。

2) 稳定性:将软件上线到腾讯应用宝,通过真实的用户数据测试系统的稳定性。应用宝真实数据如图14所示。

Figure 14. YingyongBao real data (2018-10-10)

图14. 应用宝真实数据(2018-10-10)

Table 1. Test phone description list

表1. 测试手机说明列表

5.2.3. 测试结论

经过反复的严格测试,最终得到以下测试结论:

1) 软件在功能、性能、用户体验上基本满足系统在分析阶段所列的各个要求;

2) 服务器在各种不同文件的情况下能顺利传输数据到手机端,同时手机端也能顺利接收;

3) 软件在所有测试手机上均可以流畅运行,所有模块均无异常报错,兼容Android5.0以上各版本系统;

4) 根据应用宝真实用户数据验证软件具备较好稳定性;

5) 服务器在带宽传输速度上略有不足,不能快速传输到用户端。

6. 结论

动态桌面APP软件实现了视频、图片为手机桌面的两大主要功能,还添加了“每日心情”的新颖功能,给用户不一样的体验。该APP解决了静态壁纸应用给用户体验较差,动态壁纸应用安装包较大,动态资源较少等诸多问题,提供了一款具备丰富的在线资源、便捷的操作界面、简洁的物料设计等特点的轻量级动态壁纸应用。

参考文献

[1] 盖索林. Android开发入门指南[M]. 第2版. 北京: 人民邮电出版社, 2012.
[2] 靳岩, 姚尚朗. Android入门开发与实践[M]. 北京: 人民邮件出版社, 2012.
[3] 李佐彬. Android开发入门与实战体验[M]. 北京: 机械工业出版社, 2010.
[4] 潘凯华, 刘中华. PHP从入门到精通[M]. 第2版. 北京: 清华大学出版社, 2010.
[5] 刘中华, 潘凯华. PHP项目开发案例全程实录[M]. 第2版. 北京: 清华大学出版社, 2011.
[6] 石正喜. MySql数据库实用教程[M]. 北京: 北京师范大学出版社, 2014.
[7] 姜承尧. 高性能网站MySql数据库实践[M]. 维普中文科技期刊数据库, 2013.
[8] 崔洋. MySql数据库应用从入门到精通[M]. 北京: 中国铁道出版社, 2013.
[9] 汪永松. Android平台开发之旅[M]. 北京: 机械工业出版社, 2010.
[10] 张恒喜, 史争军. 基于SQLite的Android数据库编程[J]. 电脑编程技巧与维护, 2011(21): 30-31.
[11] 王向辉, 张国印, 等. Android应用程序开发[M]. 北京: 清华大学出版社, 2010.
[12] 张磊. 基于Android平台的应用开发研究[J]. 计算机光盘软件与应用, 2011(17): 211.
[13] 李代平. 软件工程[M]. 第2版. 北京: 清华大学出版社, 2012.
[14] 王水, 张晓民. 软件工程素质导论[M]. 郑州: 河南科学技术出版社, 2011.