没有开发过Android、IOS等移动端的开发,记录从零开始学习Android开发历程。学过、用过那么多的语言、开发模式却很少留下记录,一方面是由于曾经的工作环境影响,网络受控;一方面是自己长久以来对文字的尊重,总以为非深思熟虑不能成文,非别具匠心不可以发表;还有就是自己的懒惰,懒得动笔。
人的状态总还是多少受环境影响的,时得清闲,又对Android有几分兴趣,虽然Android已经发展多年,现在学习Android可能太晚,但我不求先行,只求窥其一斑;不求文章准确精美,只求雁过留声。记录下学习Android的过程,若是能给路人的带来点启发,那就是无意间点积德善举,若是错误百出,那也不要怨言,因为每片博文均一气写成,逻辑、文字错误均没检查,甚至写完后再没有看过,我本就把博文当做随笔,留个纪念而已。
我这人学东西一般是不求甚解,无论什么语言,什么框架均喜欢先学习整个结构如何,事件如何处理、数据如何存储、界面如何展示、各页面如何调用等。正如每次买到一本新书,总喜欢把先把目录和前言好好看看,有个大概的映像再去分解阅读。我这样的人往往难得深入,一般是了解结构、方法,遇到问题再由点解决问题,就好像是一座楼房只建了框架,哪层卖出去了才建哪层的围墙,从外看来,不是栋美观高上大楼房,但也不会影响居住,总是难得讨人喜欢罢了。
Android这些年来积累的学习资源可为丰富至极,但我一般还是喜欢看官网的资料,一来准确,二来权威。所幸Android的官网资料丰富,不久有讲解,还有实例(Android Studio中可以直接导入example),大部分还有中文说明,真是方便。开发工具当然选的是Android Studio,Google已经宣称不再支持Eclipse的Android插件了。Android开发的官网是:https://developer.android.com/guide/index.html。学习的方式也按我以往的基本步骤:官网基础知识,典型开发模式和开发框架,典型实例、调试、测试、打包及更新,自定义Demo。
在官网目录中有Training和Api Guides两个目录,我大略看了一下,可能在学习过程中以Api Guides为主,部分例子可参考Training和Samples。
如官网所说:Android 提供了一个内容丰富的应用框架,支持您在 Java 语言环境中为移动设备开发创新应用和游戏。Android不仅仅应用于我们熟知的Pad、Phone,还应用于智能终端、各类传感器等多种移动终端。
Android应用提供多个入口点:Android 应用都是将各种可单独调用的不同组件加以组合开发而成。例如,组件可以是为用户界面提供一个屏幕的单个“Activity”,也可以是在后台独立执行工作的“服务”。这一点真的很吸引人,在一般的应用中只有唯一的入口,如VC、VB等应用只有一个入口main函数。在Android中都是组件化的,每个组件可以相互独立,又可以相互调用组合完成一个完整的事务,我感觉现在逐渐升温的微服务以及云计算里的Dock采用了相似的思路,将功能独立化,不仅使得节约了开发成本,也提高系统健壮性,可测性,好处多多。嗯,我不禁迫切想知道组件之间是如何独立运行又相互调用的。
Android操作系统是一种多用户的Linux系统,Android应用采用Java语言编写,最终应用将数据、代码和资源一起编译到一个.apk的存档文件。一个应用以不同的Linux用户,具有唯一的Linux用户ID,只能访问本用户资源,如果希望多个应用访问共同资源可以采用以下方法:
1.为不同应用设置同一Linux 用户id
2.通过调用其他组件访问相关资源
Android有四类组件:
1.Activity
主要用于用户界面展示
2.Service
用于在后台长时间运行,没有界面,跟Windows等后台服务类似。
3.ContentProvider
主要用于数据等存取,如:文件系统、SQLite 数据库、网络上或您的应用可以访问的任何其他永久性存储位置。
4.BroadcaseReceive
用于响应系统等各类消息。
如何启动组件?
四种组件类型中的三种 — Activity、服务和广播接收器 — 通过名为 Intent 的异步消息进行启动。组件间相互调用,主要依赖于Intent。各组件调用等方法不同,但都通过Intent传递数据。
1.Activity启动方法
- 直接调用采用startActivity(),
- 需要获取返回值采用startActivityForResult()
2.Service启动方法
- 直接启动采用startService(),
- 需要绑定该服务采用bindService(),即启动者销毁,绑定的服务同时销毁。
3.BroadCast启动方法
通过sendBroadcast(),sendOrderedBroadcast() 或 sendStickyBroadcast() 等方法来发起广播
4.ContentResolver调用方法
采用query()调用。
Android项目文件目录
1.mainfests
项目文件清单:声明项目中的各个组件,组件的访问权限等。
2.java
项目的源码目录:包括源码、测试代码
3.res
项目资源文件:包括页面布局、本地化设置、全局的字符串定义、图标等。