*******前期咱们不打算进行太深刻的东西,省的吓跑刚进门的,感受门槛高,so,咱们一开始就是跑马灯同样,向前蹿*************html
前一篇 咱们从大概上知道了 Android的体系,我强调,咱们的重点是Application,包括之后的开发 咱们也都是开发Application,没有其余。java
咱们队APP有了大概了了接,知道 .apk的组成。android
那么真正的app 包含哪些细节的东西呢,都是概念性的东西,可是必须知道。因此 咱们一一罗列出来,并对照关系。数据库
首先咱们讲解的是其四大组件 Activity /BroadcastReceiver/ Service /Content Provider编程
1.Activitywindows
一个Activity是一个应用程序组件,提供一个屏幕,用户能够用来交互为了完成某项任务,例如拨号、拍照、发送email、看地图。每个activity被给予一个窗口,在上面能够绘制用户接口。窗口一般充满屏幕,但也能够小于屏幕而浮于其它窗口之上。Android应用中每个Activity都必需要在AndroidManifest.xml配置文件中声明,不然系统将不识别也不执行该Activity缓存
一个应用程序一般由多个activities组成,他们一般是松耦合关系。一般,一个应用程序中的activity被指定为"main"activity,当第一次启动应用程序的时候呈现给用户的那个activity。每个activity而后能够启动另外一个activity为了完成不一样的动做。每一次一个activity启动,前一个activity就中止了,可是系统保留activity在一个栈上(“back stack”)。当一个新activity启动,它被推送到栈顶,取得用户焦点。Back Stack符合简单“后进先出”原则,因此,当用户完成当前activity而后点击back按钮,它被弹出栈(而且被摧毁),而后以前的activity恢复。app
2.Service ide
一个Service 是一段长生命周期的,没有用户界面的程序,能够用来开发如监控类程序.相似 windows 服务。能够用来进行 缓存处理、大数据处理、音乐媒体文件播放等后台处理。布局
比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者能够选择歌曲并播放歌曲。然而,音乐重放这个功能并无对应的activity,由于使用者固然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而能够在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。另外,咱们还能够经过使用Context.bindService()方法,链接到一个service 上(若是这个service 尚未运行将启动它)。当链接到一个service 以后,咱们还能够service 提供的接口与它进行通信。拿媒体播放器这个例子来讲,咱们还能够进行暂停、重播等操做。
3.Content Provider
此组件提供数据内容分发共享,至关于自身的数据的对外一个接口Provider,android平台提供了Content Provider使一个应用程序的指定数据集提供给其余应用程序。这些数据能够存储在文件系统中、在一个SQLite数据库、或以任何其余合理的方式
4.Broadcast receivers
广播接收器,顾名思义,就是接受来自系统或者程序的事件通知,而后转发通知订阅者程序。至关于C#中的事件 订阅 广播模式。Broadcast receivers订阅本身须要的事件通知信息,进行自身的处理,好比 :电池电量太低,蓝牙打开,等等,系统推送消息到 系统的 事件总线,而后由订阅者获取事件,(Event-Bus)事件总线模式,是我推测的,不知道是否是这种模式,在 WCF基于 Azure开发的时候,提供事件总线,对来自不一样来源 的消息进行推送通知,交由特定的订阅者进行消息的分发处理。
5.Views and ViewGroups
在程序界面上你能看到的程序控件 都是派生来自 View 类,例如:buttons, labels, textboxes, and radio
buttons are all examples of Views,
View是全部UI组件的基类,而ViewGroup是容纳这些组件的容器,其自己也是从View派生出来的。AndroidUI界面的通常结构可参见下面的示意图:
View 的建立 能够经过编程 或者xml布局的方式进行。咱们一般都是在IDE下进行 View 控件的开发
6.User interface widgets
接口部件,Android提供基于部件的形式进行友好的界面体验式开发,部件集在 Framework下的android.widget
7. Common layouts 布局(五种布局模式)
1 LinearLayout 线性布局
线性布局,这个东西,从外框上能够理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每个LinearLayout里面又可分为垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每个元素依次向右排列。
linearLayout中有一个重要的属性 android:layout_weight="1",这个weight在垂直布局时,表明行距;水平的时候表明列宽;weight值越大就越大。
线形布局中预览和真机中彻底同样。
TextView占必定的空间,没有赋值也有必定的宽高,要特别注意。
2 FrameLayout
FrameLayout是最简单的一个布局对象。它被定制为你屏幕上的一个空白备用区域,以后你能够在其中填充一个单一对象 — 好比,一张你要发布的图片。全部的子元素将会固定在屏幕的左上角;你不能为FrameLayout中的一个子元素指定一个位置。后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部份或所有挡住(除非后一个子元素是透明的)。
三、AbsoluteLayout
AbsoluteLayout 这个布局方式很简单,主要属性就两个 layout_x 和 layout_y 分别定义 这个组件的绝对位置。 即,以屏幕左上角为(0,0)的坐标轴的x,y值,当向下或向右移动时,坐标值将变大。AbsoluteLayout 没有页边框,容许元素之间互相重叠(尽管不推荐)。咱们一般不推荐使用 AbsoluteLayout ,除非你有正当理由要使用它,由于它使界面代码太过刚性,以致于在不一样的设备上可能不能很好地工做。
四、RelativeLayout
相对布局能够理解为某一个元素为参照物,来定位的布局方式。
五、TableLayout
表格布局相似Html里面的Table。每个TableLayout里面有表格行TableRow,TableRow里面能够具体定义每个元素。每一个TableRow 都会定义一个 row (事实上,你能够定义其它的子对象,这在下面会解释到)。TableLayout 容器不会显示row 、cloumns 或cell 的边框线。每一个 row 拥有0个或多个的cell ;每一个cell 拥有一个View 对象。表格由列和行组成许多的单元格。表格容许单元格为空。单元格不能跨列,这与HTML 中的不同。
TabRow只论行,不论列(列自定义)。
(布局参考来自:http://www.cnblogs.com/chiao/archive/2011/08/24/2152435.html)
8.Adapter layouts 自适应布局
List View
Grid View
两个自适应布局
9.XML layout files
页面布局文件,一个xml文件,包含 Tags 来进行布局 控件的 声明,每一个控件对应的是 对应 的控件类,属性进行控件的初始化赋值。每一个控件都有惟一的ID,
如:android:id="@+id/searchButton",@ 告诉解析器 这是控件的Id,+ 表示注册到资源文件到R.java,在资源文件中,对应的整数数字ID标识到控件。
10.Intents
消息传递承载容器,用来在Android的各个部件间进行通信的时候,消息承载。
主要用于:一、窗体Activity的数据传递 二、服务数据通知 三、组件间进行通信数据传递 等
11. Resources
实现对程序的资源文件 ,图像 、音频、视频、文件、动画菜单、样式 的操做管理。
12. R.java 文件
当编译项目的时候,程序包中的资源文件ID标识被放置到程序的R.Java文件中,R class 文件中包含各个资源的int 类型的标识ID。以下图:
看完以上的内容,咱们对app 的开发的认知基本完毕。再次提示:不会进行过深的层次的讲解。待熟练后,能够对各个部件 概念进行更深刻的学习。