最近需要开始带我司的安卓项目了,虽然之前也有做过几个安卓的项目,不过对于安卓的开发了解的还真的是很有限。最为一个笃信 PM 应该至少了解负责项目的基本开发知识的人,在今天的时候就开始了学习 Android 开发基本知识的征程啦。
因为之前我是一个 iOS 开发工程师,所以很自然的就选择了一篇写给 iOS 工程师的 Android 教程,里面介绍了安卓开发的一些基本知识,以及对于 iOS 和 Android 开发异同的对比,有兴趣的也可以去看看原文,objc.io 里面的文章还是挺不错的。
苹果现在如日中天,市值和盈利都一骑绝尘,作为果粉的我们在自豪的时候要知道一个不能忽视的事实,那就是在智能机市场上,有80%的用户使用的是安卓手机,所以安卓的市场对于一款产品是很重要的,尤其是对于我们这种需要获取大量用户的社交媒体应用。
那么正文就开始了。首先需要了解的是,安卓是用 Java 进行开发的,虽然我之前听说好像 C++ 也可以开发安卓应用,但是主流应该还是使用的是 Java 开发的。其次是在安卓中是使用命名空间和包名的方式管理类,而不是在 iOS 中那样使用前缀,例如:UITextView、NSString 这样的名字。实例变量是用 m 开头的,而不是像 iOS 那样使用 _ 开头。而且也没有 Setter 和 Getter 方法也没有 Property 了。这些东西可能对不了解开发的 PM 来讲听起来一头雾水吧,但是我也要照顾一下 iOS 开发的心情嘛。
Android 项目的结构分为两部分:一部分是源码,另一部分是资源。源码是以 Java 包的形式来管理的,一般是以 activities, fragments, views, adapters, and data 这样的结构来放置代码的。而资源呢,主要包含两部分内容,就是图片和 XML 文件。图片顾名思义就不用过多解释了,而 XML 可能对于 iOS 开发来讲接触的比较少,对 PM 来讲就更少了...在 Android 中,对于空间位置的设置,颜色的配置之类的信息就可以放在 XML,其作用和 iOS 项目中的 Storyboard 或者 Nib 文件差不多,也包含了类似 Autolayout 之类的位置控制功能,XML 的格式如下图:
在 Android 项目中,项目的配置信息被放置在 AndroidManifest.xml 这个文件中,除了一些基本的应用名之类的信息,还可以配置其他应用打开这个应用的规则之类的信息,与 iOS 项目中的 plist 类似。
然后是开发过程中可能耗费最大精力的东西,在 iOS 中叫 ViewController,在 Android 里呢,就叫 Activities,这个东西其实主要就是编写了某个界面中页面和数据互相通信的逻辑,比如你在这个界面里点击了搜索按钮,就触发了搜索的事件,然后在 Activity 中把搜索的关键词传到数据库里去搜索相关的内容,之后再把返回的数据显示出来,所以这其中负责协调的就是 Activity 了。作为一个试着去了解 Android 开发的 PM,你在之后和 Android 开发交流的时候就可以不用说这个界面怎么怎么样啊,你可以说你这个 Activity 里面的逻辑是怎么怎么样的,ListView 的数据源是怎样怎样的(具体关于 Android 中的常用控件我应该会再写一篇设计相关的文章,就不放在这里啦),程序员也许就会觉得:“哎呀我去,懂行啊少年...”,当然装逼不是目的,更好的交流更多的尊重才是。
除了Activity,在 Android 中还有一个叫 Fragments 的东西,它其实也是控制视图的逻辑,不过不是控制整个页面,而是这个页面中一部分视图的逻辑,所以在平板中用的比较多,以下图为例:
Fragments 在 Android 平板中
左边的联系人列表是一个 Fragment,而右侧的联系人详情也是一个 Fragment。使用 Fragment 可以更好的复用一些常用的模块,比如可以把联系人列表那个 Fragment 很方便的再放到其他的界面中去。
Activity 的生命周期是这样的:
Activity 生命周期
其中需要注意的是,Android 的 Activity 在转屛的时候会重新创建,之前也听 Android 开发的同事说过,Android 的转屛处理不如 iOS 那么方便而且会有各种问题,我估计可能就是因为这个问题,因为转屛之后相当于一个 Activity “重生”了一次,所以需要在转屛之前做好数据的存储,然后再利用这些数据创建这个 Activity,再展示出内容。
在安卓中的数据存储方面,与 iOS 有 Core Data 不同,安卓方面是直接操作 sqlite,然后处理返回的结果。
大致上的内容呢就是这么多,当然这只是初学的基础知识,肯定其中有内容是我理解有误的。之后应该会写一篇 Android 设计方面的基础知识,例如控件和设计规范等等。
网友评论