1、Activity和View

Activity是Android应用中负责与用户交互的组件,它只能通过setContentView(View)来显示指定组件。

View组件是所有UI控件、容器空间的基类,View组件就是用户看到的Android应用中实实在在的部分。

但是View组件需要放到容器组件中,或者使用Activity将它显示出来,方法调用activity的setContentView()方法。

两种方法:一种使用View对象作为参数

LinearLayout layout = new LinearLayout(this);//创建一个线性布局管理器,LinearLayout是ViewGroup的子类,后者有时View的子类。

设置该activity显示layout

setContentView(layout);

方法二:使用布局管理资源的ID作为参数

setContentView(R.layout.main);//设置该activity显示main.xml文件定义的view。

实际上activity是window的容器,activity包含一个getWindow()方法,该方法返回该activity所包含的窗口。

2、service

service与activity地位并列的,但它通常位于后台运行,一般不与用户交互,因此service组件没有图形用户界面。service组件通常用于为其他组件提供后台服务或者监控其他组件的运行状态。

3、BroadcastReceiver

表示广播消息接收器。它非常类似于事件编程中的监听器;与普通事件监听器监听的事件源是程序中的对象,而它监听的是事件源是Android应用中的其他组件。

使用BroadcastReceiver组件接收广播消息比较简单,开发者只需要实现自己的BroadcastReceiver子类,并重写onReceive(Context context,Intent intent)方法即可。当其他组件通过sendBroadcast()、sendStickyBroadcast()或者sendOrderedBroadcast()方法发送广播消息时,如该BroadcastReceiver也对该广播消息感兴趣(通过IntentFilter配置),BroadcastReceiver的onReceive(Context context,Intent intent)方法将会被触发。

实现了BroadcastReceiver之后,有两种方式注册这个系统级的“事件监听器”:

1、在java代码中通过Context.registerReceiver()方法注册BroadcastReceiver。

2、在AndroidManifest.xml文件中使用<receiver.../>元素来完成注册。

4、ContentProvider

如果Android应用之间需要实现实时的数据交换。使用标准ContentProvider。当用户实现自己的ContentProvider时,需要实现以下方法:

inset(Uri,ContentValues):向ContentProvider插入数据

delete(Uri,ContentValues):删除contentprovider中指定数据

update(Uri,ContentValues,string,String[]):更新ContentProvider中指定数据

query(Uri,String[],String,String[],String):从ContentProvider查询数据。

一个应用程序使用ContentProvier暴露自己的数据,另一个应用程序使用ContentResolver来访问数据。

5、Intent和IntentFilter

Intent是Android应用内不同组件之间通信的载体。它可以启动应用中另一个activity,也可以启动一个service组件,还可以发送一条广播消息来出发系统中的BroadcastReceiver。也就是说activity、service、BroadcastReceiver三种组件之间的通信都以Intent为载体。

a、需要启动一个activity时,可调用context的startActivity(Intent intent)或startActivityForResult(Intent intent,int requestCode)方法,这两个方法中的Intent参数封装了需要启动的目标Acitivity的信息。。

b、当启动一个service时,可调用Context的startService(Intent intent)方法或bindService(Intent service,ServiceConnection conn,int flags)方法,这两个方法中的Intent参数封装了需要启动的目标Acitivity的信息。。

c、当需要发一个BroadcastReceiver时,可调用Context的sendBroadcast(Intent intent)、sendStickyBroadcast(Intent intent)或者sendOrderedBroadcast(Intent intent,String receivePermission),这两个方法中的Intent参数封装了需要启动的目标Acitivity的信息。

Intent封装了当前组件需要启动或出发的目标组件的信息。

当一个组件通过Intent表示了启动或触发另一个组件的“意图”之后,这个意图分为两类:

显式Intent:显式Intent明确指定需要启动或者触发的组件的类名。

隐式Intent:隐式Intent只是指定需要启动或者触发的组件满足怎样的条件。

对于隐式Intent而言,Android系统需要对该Intent进行解析,解析出它的条件,然后再去系统中查找与之匹配的目标组件。找到则触发。

那么Android系统如何判断被调用组件是否符合隐式Intent呢?靠IntentFilter来实现,被调用组件可通过IntentFilter来声明自己所满足的条件--也就是声明自己到底能处理哪些隐式Intent。

Android应用程序的基本组件介绍的更多相关文章

  1. Android基础_1 四大基本组件介绍与生命周期

    Android四大基本组件分别是Activity,Service(服务),Content Provider(内容提供者),BroadcastReceiver(广播接收器). 一.四大基本组件 Acti ...

  2. Android应用程序窗体设计框架介绍

    在Android系统中,一个Activity相应一个应用程序窗体.不论什么一个Activity的启动都是由AMS服务和应用程序进程相互配合来完毕的.AMS服务统一调度系统中全部进程的Activity启 ...

  3. 解开Android应用程序组件Activity的"singleTask"之谜

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6714543 在Android应用程序中,可以配 ...

  4. Android应用程序窗口(Activity)实现框架简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8170307 前面我们学习了SurfaceFli ...

  5. Android测试(一)——Apk文件结构以及Android组件介绍

    APK文件结构: assests目录:一般存放的是不会被编译处理的文件,一般是资源性质的文件或者配置文件: libs目录:程序依赖的native库,包含针对特定处理器软件层的编译代码: res目录:存 ...

  6. Android学习06Android应用程序的基本组件

    一个Android应用程序可以由几个不同的组件构成,Android应用程序的基本组件包括:Activity,Service,BroadcastReceiver,ContentProvider和Inte ...

  7. Android应用程序的结构和解析

    什么是Android应用程序的构成? Android应用程序的各个组件又是什么? 各个组件和AndroidManifest之间的关系是什么? Android应用程序由松散耦合的组件组成,并使用应用程序 ...

  8. Android应用程序组件Content Provider简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6946067 在Android系统中,Conte ...

  9. Android应用的基本组件介绍和签名Android应用程序

    一.Android应用的基本组件介绍  Activity和View :Activity只能通过setContentView(View)来显示指定的组件.View组件是所有UI控件.容器控件的基类,Vi ...

随机推荐

  1. Dijkstra算法(C语言)

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  2. BZOJ3732: Network(Kruskal重构树)

    题意 Link 给出一张$n$个点的无向图,每次询问两点之间边权最大值最小的路径 $n \leqslant 15000, m \leqslant 30000, k \leqslant 20000$ S ...

  3. Linux交叉编译工具链和模块编译

    所有的工具: aarch64-poky-linux-addr2line aarch64-poky-linux-c++filt aarch64-poky-linux-g++ aarch64-poky-l ...

  4. vim自定义配置之UI设置

    vimConfig/plugin/ui-setting.vim let os = substitute(system('uname'), "\n", "", & ...

  5. (转)2009-05-25 22:12 Outlook2007选择发送帐号

    本文转载自:http://hi.baidu.com/vugwggogodaenqe/item/c95c6d019457a2d873e676ec outlook2007可以用程序选择发送帐号,其他的版本 ...

  6. C++ 类成员的构造和析构顺序

    我想对面向对象有了解的童鞋应该不会对类和对象感到陌生吧 ! 对象并不是突然建立起来的,创建对象必须时必须同时创建父类以及包含于其中的对象.C++遵循如下的创建顺序: (1)如果某个类具体基类,执行基类 ...

  7. 20190313_C#反转绘制字符串

    效果图: 代码: private void button7_Click(object sender, EventArgs e) { Point p = new Point(10,10); Graphi ...

  8. Keras Sequential顺序模型

    keras是基于tensorflow封装的的高级API,Keras的优点是可以快速的开发实验,它能够以TensorFlow, CNTK, 或者 Theano 作为后端运行. 模型构建 最简单的模型是  ...

  9. MPI 派生数据类型 MPI_Type_create_struct(),MPI_Type_contiguous(),MPI_Type_vector(),MPI_Type_create_hvector(),MPI_Type_indexed()

    ▶ 使用 MPI 派生数据类型,减少数据在传输过程中的耗时 ● MPI_Type_create_struct() 范例代码 { ; int globalDataInt[globalSize], glo ...

  10. leetcode441

    public class Solution { public int ArrangeCoins(int n) { //convert int to long to prevent integer ov ...