学龄四天的安卓菜鸟的自述

这个暑假,好热啊~

Posted by Xiphoray on Jul 27, 2017

img

先把这四天的学习成果贴上来吧: Workingmusic for Android 下载

项目传输门

暑假嘛,就要学点东西。

因为两个比赛而困在学校的我,在假期一开始有点不知所措。有时候六七点跑到实验室,上网翻看少数派的文章,去酷安瞧瞧别人做的 App ,到 21ic 看看公开课,晃晃荡荡就一天了。前阵子智能车花销蛮大的,现在都不想做东西了。

促成我去学安卓的原因大概有三个吧。其一,就在我东看西看的时候,就翻到了关注已久的 Android Things,这东西可以搭载到树莓派上面,做出很多炫酷的东西。我老早就想买个树莓派耍耍了。其二,在酷安上看到一个开发者,自称准大一,他开发了一个 Xposed 的插件,名字叫净眼,可以根据应用的布局框架把选中的图片等部分去除,达到去掉应用广告的目的。当时看到的时候心里有点点触动,他一个中学生就有独自开发的能力,而且开发的还是 Xposed 插件这种旁门左道,真令人眼羡(不过他的UI实在不敢恭维)。其三呢,就是在少数派上面看到关于 Xposed for Nougat 的一篇文章,文章里讲了 Xposed 的开发者 rovo89 是多么有才华,多么特立独行特立独行。因为他对安卓的深入理解,才有了 Xposed ,又是他对 Xposed 的完美追求,让他迟迟不推出 Xposed for Nougat 。

然后,我就开始学安卓了。

Java 我没学过,但我学过 C# 。稍微看一下代码就知道,其实这俩东西基本上是一样的,至少表面的使用是差不多的,底层是不是也差不多我就不清楚了。我没见过其他面向对象的语言,不知道是不是它们都长这个样,还是说微软和甲骨文两家杠上了。

代码方面没什么问题,剩下的就是 Android 这个大框架了。我同样把它类比成 .Net 来学,所以学起来的进度蛮快的。私以为,它有几个很重要的概念是 .Net 没有的。首先就是活动和服务这两个大概念,还有比如监听、广播等小概念,在 .Net 的表层也是没有体现出来的。

监听这个概念很有意思。 .Net 里面控件的使用都是直接写入相对于操作的函数里面的,比如鼠标按下,就有特定的按下函数,直接将函数赋给控件就可以了。但 Android 则要先建立一个监听。我现在只用过onclick()这个监听。

image

最后来说一下我的这个 App 吧。开头直接导入 Google 提供的一个侧边栏的模板,嗯,很 Material Design 。其实这个 App 的想法就是想做一个简单的白噪声 App 。这个想法是很早以前有的,那时候一直找不到喜欢的白噪声软件,于是自己用 .Net 写了一个 Windows 版的。虽然现在已经找到一个叫 TaoMix 的超好用的 App ,但想着反正是练手,就拿这个写了安卓版。第一天搭好了整个 UI 界面。第二天几乎可以完成了,然而在选用播放器的时候,一开始我见 Soundpool 可以直接同时播放多个音频,就毫不犹豫地用了,结果发现由于缓存还是别的什么问题,它只能播放很短的一段音频。于是我马上换了 Mediaplayer ,想赶在第二天就写完,但问题又马上来了。我有四个音频文件,但在加载的时候出现了迷一样的问题,有时候有一个可以播放出来,有时候两个,有时候一个也没有。我一开始认为是 Mediaplayer 加载缓存时间太短,甚至还让它在一个加载完之后再继续加载下一个。这样勉强能播放三个音频,但我有四个啊,强迫症告诉我,一个不能落下。我上网查了很多,但网上最多也都只是用了两个 Mediaplayer 来播放音频,没有像我这样用四个的。第三天的时候发现有一篇文章说到有一个叫 AudioTrack 的东西,它只能播放解码后的音频,而 Mediaplayer 是解码后用它来播放的。这点醒了我,可能是解码时间的问题。我把原来的 .mp4 格式的音频转码成 .WAV 格式,相当于解码了。然后再放进去播放,成了!然而还有个第四天(这句话好像在哪篇名著有类似的……)。第四天我就对各方面做了优化,加了开始动画,加了通知栏。唯一缺憾的是,本来想在通知栏上面加上按键来直接控制的,但是这东西极其复杂,涉及到跨布局来调用控件,我捣鼓了半天都没弄出来,只好暂时舍弃了。

突然想起来,当时微信小程序出来的时候,爱范儿弄了一个活动,大概是在几天之内做出一款小程序。那时候小程序还没有推出,但开发文档什么的都有了。那些参加活动的开发者们不就和我现在很相像么~

现在出来的是我比较满意的版本。还是那句话,下次更新遥遥无期,主要看我心情。

顺便提一下,我知道那个按键的文字用思源宋体很突兀,但我就是没办法舍弃。谁叫思源这么耐看呢~

img




Share