为什么我要搞这个《远方的朋友安卓》应用?
我那个发小,阿强,前年接了个大单子,跑去深圳安家了。一下子就隔了上千公里。刚开始那阵子还天天微信视频,后来大家都忙,就剩下一个月偶尔打个电话。
有天我半夜睡不着,寻思着老是这样光用微信语音,感觉连接太弱了。我想弄个更蠢一点,更直接一点的东西。不是为了聊天,就为了证明:“哥们,我刚才想你了,按了一下钮,你那边收到了,这就够了。”
我是个写安卓应用出身的,自然就想在手机上搞一套。一个最简单的、傻瓜式的应用,就两个功能:一个是“我想你了”按钮,按下去对方手机震一下;另一个是“远方掠影”,能实时同步一张最新的照片。
动手前,我给自己铺的那条烂路
面对的就是那个老问题:怎么在两部隔着上千公里的手机之间,实现一个瞬间的震动信号和一张照片的传递?
小编温馨提醒:本站只提供游戏介绍,下载游戏请前往89游戏主站,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区
我一开始想得简单又粗暴。什么高端的“即时通讯框架”?不需要。什么“消息队列”?太麻烦。
我就想到了一个最笨的方法:
- 我弄了个最便宜的云服务器,上面搭了个简陋的API接口,就一个存数据的。
- 安卓应用每隔几秒就去“问”一下服务器:“阿强有发东西给我吗?”
- 阿强那边也是一样,按了按钮,就把一个简单的 JSON 数据丢到服务器,然后我的应用去“问”的时候,数据拉下来就震动。
我当时觉得,这多简单!避开了所有的技术难点,直接用最粗糙的方式实现目标。写安卓客户端只花了一个下午,后端接口不到一小时就搞定,马上就部署跑起来了。
具体在安卓上我做了哪些“蠢事”
在Android Studio里,我拉了一个主界面,布局简单得像个笑话。
- 主页:一个超大的“我想你”按钮,下面一小块是显示阿强给我发的“掠影”照片。
- 实现“我想你”:我监听了那个大按钮的点击事件。点击一触发,马上把当前时间戳和我的ID打成一个简单的字符串,然后用HttpURLConnection那套老掉牙的API,粗暴地丢到我的云接口上。接口收到数据,存起来。
- 实现实时震动(伪):这就是我那个最大败笔。我用了 Android 里面的 Handler 和 Runnable,设置了一个每隔五秒就执行一次的网络请求循环。应用一启动,这个循环就开始跑。它疯狂地去问服务器有没有新数据。一旦问到了,我调用
Vibrator 服务 让手机震动一下,屏幕边缘闪个绿光,表示“收到阿强的爱了”。 - 照片功能:我直接调用了系统相册的选取器。选完照片,我没有上传原图,那太大、太慢。我只是把图压缩到了极致,不到50K,当做略缩图传上去。然后服务器把这个略缩图存起来,等我下次轮询时一起拉下来显示。
这个过程充斥着各种“暴力求解”的味道,一点都不优雅,但它就是能跑起来。
跑起来后遇到的那些“狗屁倒灶”
应用写完后,我赶紧给阿强打包了一个APK,让他装上了。我们互相按了几下,能震动,照片也同步了。当时我们俩都乐坏了。
但是,好景不长,只过了一夜,我的手机就给我脸色看了。
第二天早上,我发现手机电量掉得巨快,晚上睡觉八个小时,电量直接没了30%。我打开系统后台一看,好家伙,那个《远方的朋友》一直在消耗电量,CPU占用一直居高不下。
我的五秒一轮询的“光辉设计”直接被 Google 的安卓系统逮了个正着。系统给我弹了一个“此应用正在过度消耗电量”的警告。
我这才意识到,这种粗暴的轮询机制在现代安卓系统上简直就是
我当时心里一万句草泥马奔腾而过,意识到自己这路子走错了。花了一周时间,我不得不老老实实地去研究了那些复杂的消息推送服务,比如 FCM。花了整整三天,才把那个该死的 Token 集成进去,把轮询改成了真正的即时推送。
虽然绕了一大圈,走了个弯路,但好歹是成功了。阿强那边按一下,我的手机立马就能收到震动提醒,再也不用担心我的电池被榨干了。这套“远方的朋友”应用,至今还在我们的手机里躺着,我们偶尔还会按一下,就图一个念想。

