Android应用的基本组件介绍
Android应用的基本组件介绍
Activity和View
Activity是Android应用中负责与用户交互的组件——大致上可以把它想象成Swing变成中的JFrame控件。不过它与JFrame的区别在于:JFrame本身可以设置布局管理器,不断地向JFrame中添加组件,但Activity只能通过setContentView(View)来显示指定组件。
View组件是所有UI控件、容器控件的基类,View组件就是Android应用中用户实实在在看到的部分。但View组件需要放到容器组件中,或者使用Activity将它显示出来。如果需要通过某个Activity把指定View显示出来,调用Activity的setContentView()方法即可。
setContentView()方法可接受一个View对象作为参数,例如如下代码:
//创建一个线性布局管理器
LinearLayout layout = new LinearLayout(this);
//设置该Activity显示layout
super.setContentView(layout);
上面的程序通过代码创建了一个LinearLayout对象(它是ViewGroup的子类,ViewGroup又是View的子类),接着调用Activity的setContentView(layout)把这个布局管理器显示出来。
setContentView()方法也可接受一个布局管理资源的ID作为参数,例如如下代码:
//设置该Activity显示main.xml文件定义的View
setContentView(R.layout.main)
从这个角度来看,大致上可以把Activity理解成Swing中的JFrame组件。当然,Activity可以完成的功能比JFrame更多。
Activity为Android应用提供了可视化用户界面,如果该Android应用需要多个用户界面,那么这个Android应用将会包含多个Activity,多个Activity组成Activity栈,当前活动的Activity位于栈顶。
Activity包含了一个setTheme(int resid)方法来设置其窗口的风格,例如我们希望窗口不显示标题、以对话框形式显示窗口,都可通过该方法来实现。
Service
Service与Activity的地位是并列的,它也代表一个单独的Android组件。Service与Activity的区别在于:Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。
与Activity组件需要继承Activity基类相似,Service组件需要继承Service基类。一个Service组件被运行起来之后,它将拥有自己独立的生命周期,Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。
BroadcastReceiver
BroadcastReceiver是Android应用中另一个重要的组件,顾名思义,BroadcastReceiver代表广播消息接收器。从代码实现角度来看,BroadcastReceiver非常类似于事件编程中的监听器。与普通事件监听器不同的是:普通事件监听器监听的事件源是程序中的对象;而BroadcastReceiver监听的事件源是Android应用中的其他组件。
使用BroadcastReceiver组件接收广播消息比较简单,开发者只要实现自己的BroadcastReceiver子类,并重写onReceive(Context context, Intent intent)方法即可。当其他组件通过sendBroadcast()、sendStickyBroadcast()或sendOrderedBroadcast()方法发送广播消息时,如该BroadcastReceiver也对该消息“感兴趣”(通过IntentFilter配置),BroadcastReceiver的onReceiver(Context context, Intent intent)方法将会被触发。
开发者实现了自己的BroadcastReceiver之后,通常有两种方式来注册这个系统级的“事件监听器”。
- 在Java代码中通过Context.registReceiver()方法注册BroadcastReceiver。
- 在AndroidManifest.xml文件中使用
ContentProvider
对于Android应用而言,它们必须相互独立,各自运行在自己的Dalvik虚拟机实例中,如果这些Android应用之间需要实现实时的数据交换。例如我们开发了一个发送短信的程序,当发送短信时需要从联系人管理应用中读取指定联系人的数据——这就需要多个应用程序之间进行实时的数据交换。
Android系统为这种跨应用的数据交换提供了一个标准:ContentProvider。当用户实现自己的ContentProvider时,需要实现如下抽象方法。
- insert(Uri, ContentValues):向ContentProvider插入数据。
- delete(Uri, ContentValues):删除ContentProvider中指定数据。
- update(Uri, ContentValues, String, String[]):更新ContentProvider中指定数据。
- query(Uri, String[], String, String[], String):从ContentProvider查询数据。
通常与ContentProvider结合使用的是ContentResolver,一个应用程序使用ContentProvider暴露自己的数据,而另一个应用程序则通过ContentResolver来访问数据。
Intent和IntentFilter
严格地说,Intent并不是Android应用的组件,但它对于Android应用的作用非常大——它是Android应用内不同组件之间通信的载体。当Android运行时需要连接不同的组件时,通常就需要借助于Intent来实现。Intent可以启动应用中另一个Activity,也可以启动一个Service组件,还可以发送一条广播消息来触发系统中的BroadcastReceiver。也就是说,Activity、Service、BroadcastReceiver三种组件之间的通信都以Intent作为载体,只是不同组件使用Intent的机制略有区别而已。
- 当需要启动一个Activity时,可调用Context的startActivity(Intent intent)方法,该方法的Intent参数封装了需要启动的目标Activity的信息。
- 当需要启动一个Service时,可调用Context的startService(Intent intent)方法或bindService(Intent service, ServiceConnection conn, int flags)方法,这两个方法中的Intent参数封装了需要启动的目标Service的信息。
- 当需要触发一个BroadcastReceiver时,可调用Context的sendBroadcast(Intent intent)、sendStickyBroadcast(Intent intent)或sendOrderedBroadcast(Intent intent, String receiverPermission)方法来发送广播消息,这三个方法中的Intent参数封装了需要触发的目标Broadcas的信息。
当一个组件通过Intent表示了启动或者触发另一个组件的“意图”之后,这个意图可分为两类。
- 显式Intent:显式Intent明确指定需要启动或者触发的组件的名称。
- 隐式Intent:隐式Intent只是指定需要启动或者触发的组件应满足怎样的条件。
对于显式Intent而言,Android系统无须对该Intent做任何解析,系统直接找到指定的目标组件,启动或触发它即可。
对于隐式Intent而言,Android系统需要对该Intent进行解析,解析出它的条件,然后再去系统中查找与之匹配的目标条件。如果找到符合条件的组件,就启动或触发它们。
那么Android系统如何判断被调用组件是否符合隐式Intent呢?这就需要靠IntentFilter来实现了,被调用组件可通过IntentFilter来声明自己所满足的条件——也就是声明自己到底能处理哪些隐式Intent。
转载于:https://www.cnblogs.com/zongzhankui/p/5875324.html
Android应用的基本组件介绍相关推荐
- Android 学习之路 之 Android应用的基本组件介绍(六)
Android 应用通常由一个或多个基本组件组成,前面我们看到 Android 应用中最常用的组件就是 Activity.事实上 Android 应用还可能包括 Service.BroadcastRe ...
- android核心架构Framework组件介绍
作为一个android开发者,核心架构是必须要了解的.只有了解每个核心层的作用,才能更深入的理解和学习.本篇主要讲解Java Framework层核心代码流程. 文章目录 一,Android系统架构 ...
- android的应用组件,跟我学android-Android应用基本组件介绍(五)
Activity activity 是最基本的模块,我们成为活动,一个activity通常就是一个单独的屏幕,每一个活动都被实现为一个独立的类,且都继承活动的基类.在activity的实现类里显示用户 ...
- Android Studio Text组件介绍
Android Studio Text组件介绍 Text组件 1.1Text组件有那些 以上就是常见的text组件 别看这么多,其实大体上仅需分为6种: 稍微介绍一下 如何使用?上代码! <&g ...
- MediaCodec在Android视频硬解码组件的应用
https://yq.aliyun.com/articles/632892 云栖社区> 博客列表> 正文 MediaCodec在Android视频硬解码组件的应用 cheenc 2018- ...
- Android 热修复之DexPatch 介绍
简介:Android 热修复之DexPatch 介绍 1. 方案介绍 为了解决Native模块上线后的问题,mPaas[1] 提供了热修复功能,实现不发布客户端apk场景下的热修复.目前Android ...
- android 界面组件,安卓开发学习周第三篇——Android中的UI组件
原标题:安卓开发学习周第三篇--Android中的UI组件 在Android APP中,所有的用户界面元素都是由View和ViewGroup的对象构成的.View是绘制在屏幕上的用户能与之交互的一个对 ...
- paging library java_Android官方分页组件介绍之Paging的使用详解
Android官方分页组件介绍之Paging的使用详解 发布时间:2018-04-27 13:47, 浏览次数:1618 , 标签: Android Paging Paging 使您的应用程序更容易从 ...
- Android单元测试框架Robolectric3.0介绍(一)
Android单元测试框架Robolectric3.0介绍(一) 作者 geniusmart 关注 2016.01.21 00:37* 字数 1550 阅读 18265评论 55喜欢 124赞赏 2 ...
最新文章
- 使用时间超级长的充电宝是啥样的?
- 静态网页托管_视频教程:如何在IPFS上托管网站!
- RedHat系列软件管理(第二版) --源码包安装
- Consider revisiting the entries above or defining a bean of type in your configuration.
- ACL 2022 主会长文论文分类整理
- 如何使用OpenSSL工具生成根证书与应用证书
- 黑金核心板32bitDDR3 MIG核UI接口仿真模型搭建
- 安东尼:为来欧洲踢球做出了牺牲,穿上曼联球衣让我很满足
- oracle税务运维脚本练习,荣欣Linux运维+Oracle DBA初级+高级全套实战训练
- 深度之眼(十七)——Python标准库
- SQL获得当前的日期和时间与DB2 中操作日期和时间
- java aes 中文_从Java到Python的AES加密
- UVa 11942 - Lumberjack Sequencing
- SV中program module
- 拜托,面试请不要再问我 Spring Cloud Alibaba 底层原理
- UDP可靠性传输-QUIC
- aardio 谷歌浏览器自动化 (七) 切换框架
- SpringData JPA示例
- 如何使用HDHomeRun在计算机,游戏机和其他设备上观看直播电视
- 在知乎上看到的一个电话诈骗的文章
热门文章
- spingboot集成jpa(一)
- java 管道流PipedInputStream,PipedInputStream和随机访问文件 RandomAccessFile
- PHP实现加密的几种方式介绍
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider...
- 利用FindWindow和SendMessage进程通信
- Android串口编程--开关灯Demo(附源码)
- C++函数声明和定义
- php去掉查询返回的字段序列号,php – 为返回的MySQL查询添加编号列表列
- GAN实现半监督学习
- Vulhub 靶场安装