该项目已经重构,see KnowWeather

已经有那么多的天气应用了,这个项目有什么不一样的地方吗?为什么还要做这个项目呢?

  • 第一个目的是熟悉项目从0到上线的过程,平常的工作中大部分是在做很小部分的业务开发,对项目的整体框架没机会实践。
  • 熟悉新的框架和技术,先进行应用,感受其优缺点,然后应用到工工作中,因为很多新技术学习是需要时间的,而且其特性也是需要提前了解的,在未了解的情况直接用到公司的项目会花费时间并且可能会带来风险。
  • 想做自己想用的东西。就像去年做NBAPlus时一样,当初是就想找一款只是纯粹的NBA资讯,新闻的应用。但找的效果都不好,于是就自己做了,顺便了解了服务器开发知识,把以前想学的python也学了。【知天气】也一样,我就想只是简单看看天气,而不是各种乱七八糟的广告,和各种通知,而且界面应该尽量美观,我找不到,所以就想着自己来做了,然后同时node.js搭建了server,通过一些开放的接口拼接成自己想要的天气信息,然后为应用提供接口(由于当初没想到要开源,所以有些天气信息没有提供,比如湿度等,后续会提供更多的信息)。

特点

首先这时一款天气应用,虽然是一个开源项目,但其体验不会比那些日活很大下载量上千万的天气应用差,而是会更好,除了作为一个天气应用该有的东西,如每天的天气信息、详情、生活指数等,通知栏,桌面小部件,定时更新天气等等,应用没有任何广告,支持县级、区级城市的天气。

技术选型

1.为什么没有用RxJava,没有用EventBus,没有第用orm库?

RxJava是在Android开发者中新兴热门的函数库,在处理异步任务时非常方便,在去年做NBAPlus时已经用了RxJava,而这个项目中没有那么多的异步任务需要去做,为了几个操作而引入这么大的一个库,实在没有必要,而且做这个项目时我尽量不使用第三方库,除非我不能很好的处理相应的业务,比如应用中的各种View要么是sdk里的,要么就自己实现,因为第三方的View有时不是很好的满足自己的需要,”不要重复造轮子的前提是需要的时候自己能造轮子”。因为做项目的一个目的还是为了工作服务,工作中不是所有的项目都会接入RxJava,着的时候没了RxJava,你该怎么优雅的处理异步任务?难道要强制接入吗?

事件总线库我用的自己写的Router,主要是用起来更方便,而且在使用的过程中不断完善,加入了弱引用来避免在一些没有生命周期不方便接触注册时导致的内存泄露,使用EventBus时这些你需要更换实现方式来避免内存泄露。

关于Orm库的问题,现在看来是当初的决策失误,应该使用第三方orm库比如realm,因为最初考虑没有太多的存储内容,但随着项目的慢慢发展,对数据库的要求会越来越高,比如这个版本本来准备加入的天气预警功能就因为存储的问题,暂时没有添加,但接口已经提供了。

一个项目不是使用知名的库、知名的框架就是好项目,项目不仅仅就是库的组合,要不然就只是个会使用库会使用框架的开发者,如果公司的项目没有了这些东西,你该怎么做呢?