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应用的基本组件介绍相关推荐

  1. Android 学习之路 之 Android应用的基本组件介绍(六)

    Android 应用通常由一个或多个基本组件组成,前面我们看到 Android 应用中最常用的组件就是 Activity.事实上 Android 应用还可能包括 Service.BroadcastRe ...

  2. android核心架构Framework组件介绍

    作为一个android开发者,核心架构是必须要了解的.只有了解每个核心层的作用,才能更深入的理解和学习.本篇主要讲解Java Framework层核心代码流程. 文章目录 一,Android系统架构 ...

  3. android的应用组件,跟我学android-Android应用基本组件介绍(五)

    Activity activity 是最基本的模块,我们成为活动,一个activity通常就是一个单独的屏幕,每一个活动都被实现为一个独立的类,且都继承活动的基类.在activity的实现类里显示用户 ...

  4. Android Studio Text组件介绍

    Android Studio Text组件介绍 Text组件 1.1Text组件有那些 以上就是常见的text组件 别看这么多,其实大体上仅需分为6种: 稍微介绍一下 如何使用?上代码! <&g ...

  5. MediaCodec在Android视频硬解码组件的应用

    https://yq.aliyun.com/articles/632892 云栖社区> 博客列表> 正文 MediaCodec在Android视频硬解码组件的应用 cheenc 2018- ...

  6. Android 热修复之DexPatch 介绍

    简介:Android 热修复之DexPatch 介绍 1. 方案介绍 为了解决Native模块上线后的问题,mPaas[1] 提供了热修复功能,实现不发布客户端apk场景下的热修复.目前Android ...

  7. android 界面组件,安卓开发学习周第三篇——Android中的UI组件

    原标题:安卓开发学习周第三篇--Android中的UI组件 在Android APP中,所有的用户界面元素都是由View和ViewGroup的对象构成的.View是绘制在屏幕上的用户能与之交互的一个对 ...

  8. paging library java_Android官方分页组件介绍之Paging的使用详解

    Android官方分页组件介绍之Paging的使用详解 发布时间:2018-04-27 13:47, 浏览次数:1618 , 标签: Android Paging Paging 使您的应用程序更容易从 ...

  9. Android单元测试框架Robolectric3.0介绍(一)

    Android单元测试框架Robolectric3.0介绍(一) 作者 geniusmart 关注 2016.01.21 00:37* 字数 1550 阅读 18265评论 55喜欢 124赞赏 2 ...

最新文章

  1. 使用时间超级长的充电宝是啥样的?
  2. 静态网页托管_视频教程:如何在IPFS上托管网站!
  3. RedHat系列软件管理(第二版) --源码包安装
  4. Consider revisiting the entries above or defining a bean of type in your configuration.
  5. ACL 2022 主会长文论文分类整理
  6. 如何使用OpenSSL工具生成根证书与应用证书
  7. 黑金核心板32bitDDR3 MIG核UI接口仿真模型搭建
  8. 安东尼:为来欧洲踢球做出了牺牲,穿上曼联球衣让我很满足
  9. oracle税务运维脚本练习,荣欣Linux运维+Oracle DBA初级+高级全套实战训练
  10. 深度之眼(十七)——Python标准库
  11. SQL获得当前的日期和时间与DB2 中操作日期和时间
  12. java aes 中文_从Java到Python的AES加密
  13. UVa 11942 - Lumberjack Sequencing
  14. SV中program module
  15. 拜托,面试请不要再问我 Spring Cloud Alibaba 底层原理
  16. UDP可靠性传输-QUIC
  17. aardio 谷歌浏览器自动化 (七) 切换框架
  18. SpringData JPA示例
  19. 如何使用HDHomeRun在计算机,游戏机和其他设备上观看直播电视
  20. 在知乎上看到的一个电话诈骗的文章

热门文章

  1. spingboot集成jpa(一)
  2. java 管道流PipedInputStream,PipedInputStream和随机访问文件 RandomAccessFile
  3. PHP实现加密的几种方式介绍
  4. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider...
  5. 利用FindWindow和SendMessage进程通信
  6. Android串口编程--开关灯Demo(附源码)
  7. C++函数声明和定义
  8. php去掉查询返回的字段序列号,php – 为返回的MySQL查询添加编号列表列
  9. GAN实现半监督学习
  10. Vulhub 靶场安装