音乐播放器分析——目录及总结
2015-11-03 00:01
232 查看
目录
音乐播放器代码解释音乐播放器-manifest分析
音乐播放器-引导界面的实现
SplashScreen代码分析
音乐播放器-MainContentActivity简析
音乐播放器-DAO之MusicUtils
音乐播放器-DAO
音乐播放器-MainFragment分析1
音乐播放器-MainFragment分析2
音乐播放器-MainFragment分析3
音乐播放器-MainFragment分析4
音乐播放器-MainFragment分析5
音乐播放器-MainFragment分析6
音乐播放器-Activities
音乐播放器-MenuFragment
总结
读代码
如何阅读别人的代码,知乎上面有许多好的帖子,这就是一例,里面每个回答都很精辟,甚至无需整理就是一个很完美的回答,很少有重复的观点。这些方法是通用的方法,在面向对象语言里面,如果能够熟练掌握设计模式,当所读的代码用到该设计模式的时候可以直接套用自己以前理解的思维模型,这样就更方便了。正如第二个帖子说的那样,好代码和烂代码的阅读方式是不一样的,不同人写不同的代码的命名风格也会不一样,如果在源代码里面有不同的命名风格,甚至命名根本不能做到让人望名知义,那这样的代码阅读的效率会比普通代码少了一个数量级。
总结起来,源代码的阅读方式如下:
Top-Bottom & Bottom-Top
了解功能业务
从启动入口开始读
读文档,写注释(注释就是“笔记”咯)
等
本分析博客的分析过程是由MVC所启发的,于是就先分析了数据层,再分析UI,当然也是从启动入口开始读的,遇到某一个方法的时候不仅仅看方法内怎么实现,同时也关注该方法都在哪里调用过,也就是Top-Bottom & Bottom-Top,在读一个项目的时候我们肯定是要反复的使用它,就比如该app,装在手机上到处点点,知道触发控件是哪个,比如在使用SlidingDrawer的时候,并不是点击handle的时候启动的,handle是负责退出的。如果能画出真个业务流程当然也是不错的选择。最开始的时候也写过一个SplashScreen的测试用例,这样有助于巩固已经了解的知识。
读架构
许久之前,我一直苦恼自己对于1k行以上的代码有种畏惧感(该app的xml+java文件有1-2w行),尽管听说过架构这个词语,不是很了解,现在回过头来才发现写程序之前应该先搞清楚架构。由于开始所接触的代码的架构都比较简单,所以容易忽略这个问题。读数据模型
随着计算机计算速度的飞涨,制约软件的运行的就只剩下数据,所有的代码无非是做些数据的处理罢了,了解过底层的人都知道,cpu有2个输入流,一个是指令流一个是数据流。其实指令本身不就是数据吗,怪不得大数据近年来一直吵得火热,把数据分析处理模型单列出来是早晚的事情。在这里假设没有数据连调试就很困难,数据是基本的。其实该app的数据层并不麻烦,在db和model包(省略了com.longdw.music)下,有该数据模型,除此之外,歌词也是数据,也有歌词的model,不过歌词没有存在数据库文件里面。至于sharepreference就不多说了。
读Manager
该app共有6个Activity,1个Service,若干个动态BroadcastReceiver,其中5个Activity看下就明白了,BroadcastReceiver就不多说了,ServiceManager在Application里面就使用了,以后每次用到service都通过aidl从ServiceConnection里面获取service的引用。为什么会有多篇blog介绍MainManifest呢,在MainContentActivity里面通过getSupportfragmentManager().begintransaction().replace()方法里面设置的Fragment,而该Fragment的onCreateView直接就包含了所有的控件,只不过有的不显示设置了View.GONE,于是如何对这些控件进行操作呢?,这就引出了各个控件的Manager。值得着重的是,从主界面的5个gridview item里面进入音乐列表并不是都是2次或者1次的,但最终进去的都是同一个Manager,这里巧妙的使用了2个ViewPager,并在一个方法通过8个switch_case进行设置。不得不佩服作者的设计。
每次缔造UIManager都用到了Activity和主View的引用,由此可见这在android项目中使用是多么的频繁。
其他
也许其他应用不是这么写的,不是通过Manager管理UI,不是使用透明的ViewPager等,但android上面提到的读代码的方法,架构基本就明晰了。相关文章推荐
- android中dialog封装
- 香港股市api调用代码返回示例
- 公交换乘数据接口 查询具体换乘方式
- mysql show status 详解
- tomcat证书制作
- package com.sun.image.codec.jpeg does not exist
- 1103学习代码块构造块静态块
- OC数据类型学习
- [非凡程序员]kvo
- Web服务器工作原理概述
- 枚举介绍
- ConcurrentHashMap的了解
- MyBatis入门(二)---一对一,一对多
- MyBatis入门(一)---基本使用
- MyBatis入门(三)---多个参数
- MyBatis入门(四)---动态SQL
- MyBatis入门(五)---延时加载、缓存
- MyBatis入门(六)---mybatis与spring的整合
- 逆向工程
- Android之Notification类(浅谈)