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 ...
随机推荐
- 1013:Digital Roots
注意:大数要用字符串表示! sprintf:字符串格式化命令 主要功能:将格式化的数据写入某个字符串缓冲区 头文件:<stdio.h> 原型 int sprintf( char *buff ...
- python api接口认证脚本
import requests import sys def acces_api_with_cookie(url_login, USERNAME, PASSWORD, url_access): ...
- CentOS 6.5 下keepalived服务的配置
CentOS 6.5 下keepalived服务的配置 参考网站: http://zhangxugg-163-com.iteye.com/blog/1665419 http://www.2cto.co ...
- column count of mysql.proc is wrong. expected 20,found 16. the table is probably corruptd.
1558 1547 column count of mysql.proc is wrong. expected 20,found 16. the table is probably corruptd. ...
- 重温MySQL
登录 mysql -uroot -p123456 查询当前用户 select user(); 不执行某条语句 \c 查看帮助信息 help create user; 创建用户 create user ...
- FatJar—Java Application制作jar包
Fat Jar功能非常强大,先下载吧. 下载地址:sourceforge.net/projects/fjep/files/ http://files.cnblogs.com/files/nidongd ...
- Tensorflow笔记——神经网络图像识别(四)搭建模块化的神经网络八股(正则化,指数衰减学习率,滑动平均等优化)
实战案例: 数据X[x0,x1]为正太分布随机点, 标注Y_,当x0*x0+x1*x1<2时,y_=1(红),否则y_=0(蓝) 建立三个.py文件 1. generateds.py生成数据 ...
- pythonNet day07
信号 一个进程向另外一个进程通过信号的方式传递某种讯息,接收方在接收到信号后作出相应的处理 查看信号:kill -l kill -signum PID 给PID的进程发送一个信号 信号名称:信号的名字 ...
- Django视图View
1.什么是Django的视图函数 一个视图函数(或者一个类),简称视图 是python的一个简单的函数,他是接受web请求 并且 处理逻辑 进而返回 响应 响应可以是一张网页的HTML内容,一个重定向 ...
- RabbitMQ 信道(channel)挂掉,但连接仍然存在,同时出现错误:Received remote Channel.Close (406): PRECONDITION_FAILED - unknown delivery tag x 的问题
该问题经过一番试验,发现是消费者(consumer)程序逻辑错误导致:在消息处理的回调函数中多次ack或nack. 开启Python日志,并在回调函数中两次ack得到如下信息: F:\software ...