Android应用程序的基本组件介绍
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应用程序的基本组件介绍的更多相关文章
- Android基础_1 四大基本组件介绍与生命周期
Android四大基本组件分别是Activity,Service(服务),Content Provider(内容提供者),BroadcastReceiver(广播接收器). 一.四大基本组件 Acti ...
- Android应用程序窗体设计框架介绍
在Android系统中,一个Activity相应一个应用程序窗体.不论什么一个Activity的启动都是由AMS服务和应用程序进程相互配合来完毕的.AMS服务统一调度系统中全部进程的Activity启 ...
- 解开Android应用程序组件Activity的"singleTask"之谜
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6714543 在Android应用程序中,可以配 ...
- Android应用程序窗口(Activity)实现框架简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8170307 前面我们学习了SurfaceFli ...
- Android测试(一)——Apk文件结构以及Android组件介绍
APK文件结构: assests目录:一般存放的是不会被编译处理的文件,一般是资源性质的文件或者配置文件: libs目录:程序依赖的native库,包含针对特定处理器软件层的编译代码: res目录:存 ...
- Android学习06Android应用程序的基本组件
一个Android应用程序可以由几个不同的组件构成,Android应用程序的基本组件包括:Activity,Service,BroadcastReceiver,ContentProvider和Inte ...
- Android应用程序的结构和解析
什么是Android应用程序的构成? Android应用程序的各个组件又是什么? 各个组件和AndroidManifest之间的关系是什么? Android应用程序由松散耦合的组件组成,并使用应用程序 ...
- Android应用程序组件Content Provider简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6946067 在Android系统中,Conte ...
- Android应用的基本组件介绍和签名Android应用程序
一.Android应用的基本组件介绍 Activity和View :Activity只能通过setContentView(View)来显示指定的组件.View组件是所有UI控件.容器控件的基类,Vi ...
随机推荐
- elasticsearch的插件安装
目前使用的是2.4.5版本的es 安装的时候注意以下几点 : 1.如果想所有的ip都能访问es,需要修改config下的elasticsearch.yml.修改如下 network.host=0.0. ...
- org.springframework.orm.hibernate3.HibernateTemplate
当session中出现两个相同标示的(相同主键)的对象,一个是持久态,一个是瞬时态,想更新瞬时态对象到数据库,如果不做处理,则报出异常,session中出现两个相同标示的不同对象异常.处理方法.(业务 ...
- test20181024 qu
题意 分析 极似UVa11995 I Can Guess the Data Structure! 模拟即可,时间复杂度(--)\(O(n \log n)\) 旁边的L君:这题有两个坑点,我被卡了一次. ...
- c/c++指针详解(一)
一:相关概念 1.指针数组:int *p[6] 是数组,是一个存放指针的数组,也就是里面存放的是地址. 2.数组指针:int (*p)[6] ...
- FastAdmin 中 的 layer js 使用 r.js 压缩出现的问题
FastAdmin 中 的 layer js 使用 r.js 压缩出现的问题 https://fly.layui.com/jie/2120/ layer是requirejs压缩文件r.js里面的关键字 ...
- 用原生 JS 实现双向绑定及应用实例
写在前面: 所谓的双向绑定,无非是从界面的操作能实时反映到数据,数据的变更也能实时展现到界面.angular封装了双向绑定的方法,使双向绑定变得十分简单.但是在有些场景下(比如下面那个场景),不能使用 ...
- oracle行跟踪(基于行跟踪的ROWDEPENDENCIES ORA_ROWSCN信息)
在Oracle 10g中的引入了ORA_ROWSCN伪列新特性.基于此种伪列所提供的信息,我们可以方便地找出某个数据块或某一个行最近被修改的时间戳.在默认情况下,10g下表会以非行依赖性(NOROWD ...
- Linux C 一些函数 所属的头文件
在编写程序时,有时总是不记得所使用的函数在哪个库函数中.现在先把自己以前经常用到的函数头文件总结一下. 有不对的地方还请指教. 1,系统调用文件的操作函数 #inlclude <fcntl.h& ...
- nodejs+express+ejs+mongoose实例
nodejs+express+ejs+mongoose实例 nodejs学得异常痛苦,在这里将学的东西做一番整理,算是自我安慰吧.根据网上todo示例,用express和mongoose重写了部分代码 ...
- servlet 3.0无需配置web.xml,使用注入方式配置servlet实现登陆功能(服务器需要支持servlet3.0)
首先申明上面的报错红叉,我也不知道怎么回事.总之能运行. 新建项目时选择java EE6.0,低版本没有servlet3.0. 先看一个基本示例. Test.java是用来测试无需配置文件,无需静态页 ...