前言
通过“计算器”应用我们已经熟悉了安卓应用开发的大致流程,具备了开发的初步知识。
接下来,我们将开始制作一个“视频播放器”应用,进一步加深对程序开发的学习。
当完成这个“视频播放器”应用后,大家就能够独立开发一类稍微复杂点的安卓应用了。
![](https://i-blog.csdnimg.cn/blog_migrate/036ec583970a773802e934a724c9b582.png)
本文针对的读者是:
- 对安卓开发有了初步认识,但还没有什么经验的新人;
- 对已有的安卓开发经验没有系统化整理的开发者;
在开始以前,假设各位已经做好了如下准备:
- 一台开发用笔记本电脑,并搭建好了开发环境;
- 一部安卓系统设备(手机或平板电脑);
- 设备上存放了可以播放的视频文件;
- 一根连接电脑和安卓设备的数据线(通常是micro usb数据线);
- 一到两天时间;
- 耐心与求知欲;
/*******************************************************************/
* 版权声明
* 本教程只在CSDN和安豆网发布,其他网站出现本教程均属侵权。
/*******************************************************************/
第1节 设计方案
1.1 可能的功能点
虽然是一个简单视频播放器,但是麻雀虽小五脏俱全,可能需要备以下功能:
- 将设备上存在的视频展现出来;
- 能显示某个视频详细的信息,例如视频文件大小、视频分辨率等等;
- 选择某个视频后,能够播放视频;
- 播放视频时能够控制视频的暂停、继续、快进、快退;
- 可以全屏幕的播放视频;
- 可以提供给系统使用,作为播放视频文件的可选播放器;
- 如果有电话接入,播放器能够自动暂停播放;
- 可以管理视频文件,例如删除某个或者多个视频;
- 视频可以悬浮于其它应用之上播放,一边刷微信,一边看视频;
1.2 功能广度与功能深度的权衡
每个功能看上去一句话就说完了,但是仔细分析起来,却有很多细节需要考虑。
例如功能1
,如果将设备上所有的视频都展现出来,那么,
- 可能会消耗很长的时间;
- 每个视频都要有缩略图,如果搜寻这些视频文件的时候,同时为它们创建缩略图,也许会非常消耗内存,假如视频非常多,那么有可能会耗尽安卓系统分配给一个应用最大的内存使用量,导致程序崩溃;
- 播放器在查找视频文件并显示出来的过程中,如果用户通过别的工具把这个已经显示到列表的文件删除了,例如播放器正在刷新列表,把文件
1.mp4
显示到了列表中,这时用户通过PC端的手机管理软件,把1.mp4
这个文件从设备上删除了(播放器刷新视频文件的过程还没有结束),那么手机的显示列表上要能马上发现这个意外,再次更新; - 也可能设备上有很多短小的视频文件,可能只有几十K或者几百K,根本就不是用户关心的视频,例如微信上接受的短小视频,用户就不会使用我们的视频播放器进行播放;
- 也可能用户根本不愿意播放器找出某些“敏感”的视频文件;
这都是我们在开发中需要去实实在在解决的问题。功能1
遇到的这些问题,我们都可以通过良好的设计来解决它。不过代价也许就是,
- 增加了程序的复杂度,花费更多的开发时间;
- 为了解决一个问题,而引入另外一个更佳不易解决的问题、引入另外一个潜在的bug;
- 开发钻进了死胡同,到处都是要解决的问题,不知如何开始了;
要知道,这还只是功能1
中提出的问题,不知道别的功能点还会将一个应用的复杂度增加到什么样的地步。
所以,对项目规划的设计师和程序的开发者来说,需要在单个功能完备的深度与多个功能的实现广度上,作出智慧的取舍。
好在软件的发布并不是一锤子买卖,可以在发布以后,再对它进行升级。所以我们通常先把最为重要的功能做出来,而对于这些最重要的功能则采用最容易实现的方案。
以后再对功能做出扩充,对实现的方案加以修改,逐步变的越来越完美。这个过程也更适合初学者一步一步的掌握程序设计的思路、积累开发的经验,知道同样一个功能,怎么设计更加合适,为什么要这样设计。
于是,对于我们第一个版本的视频播放器,我们将尽量采用最简单的设计,不去太多的考虑它的程序结构和执行效果,重点是用简单而正确的方式把功能做出来,以后再在新的版本中迭代优化。
1.3 现阶段的功能
为了简化问题,我们先对视频播放器允许的环境和功能做出这样的假设:
- 只读取特定目录下的视频文件,例如名称叫做
Video
的目录; - 假设用户没有那么BT:在展示视频列表的时候,用别的工具,把已经展示上去的文件给删除了;
- 在列举视频文件的时候,因为耗时可能很长,所以可以选择暂停;
- 视频文件的数量不会多的特别离谱,上千上万个视频是不会遇到的;
- 只播放系统原生支持的视频格式;
- 播放器在横屏的时候,自动切换成全屏;在竖屏的时候,占用部分区域,剩下的区域显示视频详细信息;
- 没有视频的播放记录,用户主动退出的情况下,下次再播放同样的视频会从头开始;
- 没有视频的管理功能,不能改变视频文件的位置,不能删除它,不能修改文件名字;
- 没有悬浮播放的功能;
因此,对视频播放器的界面进行了如下的设计:
![](https://i-blog.csdnimg.cn/blog_migrate/2e64cc5c29dacda2f6a86db5893d92b7.png)
1.4 关于遗憾
对于那些没有在这个阶段加入的功能,期待以后加入吧;
对于那些为了简化开发难度、减少开发时间而采用的简单设计,期待在下一版程序中优化和完善吧;
当然,别忘了这个应用的目标是:教会大家更多的安卓开发技能。所以在选择实现方案的时候,着重于原理的展示,而不一定采用执行效率最优的方案。
/*******************************************************************/
* 版权声明
* 本教程只在CSDN和安豆网发布,其他网站出现本教程均属侵权。
*另外,我们还推出了Arduino智能硬件相关的教程,您可以在我们的网店跟我学Arduino编程中购买相关硬件。同时也感谢大家对我们这些码农的支持。
*最后再次感谢各位读者对安豆
的支持,谢谢:)
/*******************************************************************/