安卓四大组件总览

        在安卓中四大组件 (Component)指的是:Activity,Service,BroadcastReceiver,ContentProvider。此博客仅仅对安卓中四大组件从整体上进行简单的分析,了解他们在安卓系统框架中处的位置与作用,各组件详细介绍将单独讲解。

首先,我们来看一下这几个类之间各自的继承关系



从上述可以看出四大组件中的Activity,Service组件都继承自Context,即它们都可看做是一个Context(事实上,安卓中的Context包括三种情况,即Application,Service与Activity),而BroadcastReceiver与ContentProvider相对独立,与其它组件在继承上没太大关联。

(一)下面我们看一下安卓官方文档Context的类的描述

从文档描述我们可以知道,Context是一个抽象类,它用来访问特定的资源或者类,是安卓系统中用来管理与操作application-level operations的类。例如,启动Activity,Service组件、注册广播接收者和启动Content Provider组件,接收Intent等。也正因为如此,所以安卓中常用的一些方法都位于Context类中,分别对应对相关组件的操作,比如startActivity对应启动一个Activity,startService/stopService,bindService/unBindService对应Service组件的操作,registerReceiver/unregisterReceiver,sendBroadcast,sendOrderdBroadcast对应BroadcastReceiver的操作,obtainStyledAttributes对应对View的操作(该函数在仔定义View属性集时会用到),openFileInput,openFileOutput,openOrCreateDatabase对应文件及数据库的操作。

注意

1)Context中存在一个重要的方法abstract Context getApplicationContext(),它返回的是一个Context对象,而Context的子类Activity,Service中存在一个类似的方法final Application getApplication(),它返回的是一个Application对象,在安卓四大组件中只有Activity与Service这两大组件中存在getApplication()方法。

2)Context的子类Activity重写了Context的startActivity()方法,一般情况下我们都是在一个Activity中启动另一个Activity,即形成所谓的Activity任务栈,但是如果在Service中调用startActivity()时,因为Service没重写Context的startActivity()方法,所以本质上它调用的是Context的startActivity()方法,此时则必须添加FLAG_ACTIVITY_NEW_TASK flag即

使用intent.setFlag(FLAG_ACTIVITY_NEW_TASK );语句。

3)在使用四大组件时经常需要指定Context参数,该参数本质上是ContextImpl对象,ContextImpl类继承自Context类,它是安卓系统框架自动管理的。



(二)维系安卓四大组件的Intent

首先看一下官方文档对Intent类的描述


从上述文档中可以看出,Intent作为一个动作的抽象描述被执行,Intent是为了降低安卓系统组件交互耦合度而采取的一种通信机制,也正因为如此,所以启动安卓各组件的方法非常相似。

1)Intent用来启动Service与Activity用法一般都相同,即通过Intent intent=new Intent(Context context,Class<?>class);,startActivity(intent)/startService(intent)来启动对应的组件

2)对BroadcastReceiver的启动与上述不同,因为对于BroadcastReceiver一般事先不用指定具体的组件名(这也正是BroadcastReceiver存在的意义)而是通过
intent.setAction(String action)或Intent intent=new Intent(String action)的方式来指定启动对action“感兴趣”的广播,即

Intent intent=new Intent();

intent.setAction(Constants.ACTION_MSG);

sendBroadcast(intent);或

Intent intent=new Intent(Constants.ACTION_MSG);

sendBroadcast(intent);

3)对于上述三种组件传递数据方式都相同,一般通过intent.putExtra(String name,Serializable value);来传递对象或使用其它相应方法传递基本类型数据,

例如在启动广播时,

Intent intent=new Intent();

intent.setAction(Constants.ACTION_MSG);

intent.putExtra(Constants.MSG, msg);

 sendBroadcast(intent);

4)Intent详细介绍请参考博文http://www.cnblogs.com/engine1984/p/4146621.html


转载于:https://www.cnblogs.com/hainange/p/6334100.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java ee 指南 pdf_Java EE 7权威指南:卷1(原书第5版) 中文pdf

资源名称&#xff1a;Java EE 7权威指南&#xff1a;卷1(原书第5版) 中文pdf第一部分 引言第1章 概述 2第2章 使用教程示例 27第二部分 平台基础知识第3章 资源创建 38第4章 注入 41第5章 打包 44第三部分 Web层第6章 Web应用入门 50第7章 JSF技术 66第8章 Facelets…

PYTHON招聘需求与技能体系

为什么80%的码农都做不了架构师&#xff1f;>>> 目前国内的招聘Python&#xff0c;基本都是偏向web后台开发&#xff0c;偶有高大上的数据挖掘&机器学习 这是之前(2012年)找工作整理的一些JD&#xff0c;在梳理几年来的笔记&#xff0c;顺带理一理 可以以此建…

《FPGA全程进阶---实战演练》第二十一章 电源常用类型:LDO和 DCDC

高速电路中的电源设计 高速电路中的电源设计大概分为两种&#xff0c;一种是集总式架构&#xff0c;一种是分布式架构。集总式架构就是由一个电源输入&#xff0c;然后生成多种所需要的电压。如图1所示。这种架构会增加多个DC/DC模块&#xff0c;这样成本不可控&#xff0c;PCB…

迁云架构实践

本文着笔介绍IT互联网化为传统企业带来的技术挑战&#xff0c;并对上云架构最佳实践进行了深入介绍&#xff0c;首发于阿里云&《程序员》联合出品的《凌云》杂志。 作者&#xff1a; 王宇德&#xff0c;张文生 云计算作为信息技术领域的一种创新应用模式&#xff0c;自其诞…

最短路最新心得

如果&#xff0c;上面的图&#xff0c;如果用dij算法&#xff0c;那么dist[4] 4, 是得不到正确的结果的&#xff0c; 这个因为dist[3]先被确定是最小&#xff0c;然后用来更新dist[4] 但是存在负权&#xff0c;使得dist[3]更小&#xff0c;但是我们已经把结点3标记为不可用了…

java wrapper怎么运行_如何从智能合约中生成Java Wrapper

在本文中&#xff0c;我们将了解如何直接从智能合约生成Java Wrapper类以与Java中的智能合约进行交互。从智能合约生成Java Wrapper类有不同的方法&#xff1a;1. Web3j命令行工具和solc2. Web3j命令行工具和Truffle构建生成的工件3. web3j-maven-plugin4. web3j-gradle-plugin…

Matlab与C/C++混合编程调用OpenCV

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com http://item.taobao.com/item.htm?spma1z10.5-c.w4002-9510581626.24.ZO6sko&id43401674106 精通MATLAB混合编程视频讲解 MATLAB各类函数…

python 程序打包 vscode_使用VScode编写python程序并打包成.exe文件

听说Visual Studio Code(VS Code)的诸多好处&#xff0c;了解了一下果真很喜欢&#xff0c;我喜欢它的缘由主要有3个&#xff0c;一是VS Code开源且跨平台&#xff0c;二是由于其界面很是酷&#xff0c;三是能够知足个人大所属代码需求&#xff0c;除此以外固然还有强大的好奇心…

使用命名空间、头文件和实现文件

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 2.3 使用命名空间、头文件和实现文件 使新的throttle类满足程序的需求将是非常…

Permissions for id_rsa are too open

为什么80%的码农都做不了架构师&#xff1f;>>> Last week I was lucky enough to have my laptop upgraded (yay SSD) which meant I needed to configure a new install of OSX Lion. Most of my files are stored online (email, documents, code, etc) but I m…

java看图_看图吧,Java

package salary;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.text.NumberFormat;public class Salary extends JFrame{//声明标签private JLabel numl;private JLabel basel;private JLabel salel;//声明文本框private JTextField numf;priva…

【MPI学习3】MPI并行程序设计模式:不同通信模式MPI并行程序的设计

学习了MPI四种通信模式 及其函数用法&#xff1a; &#xff08;1&#xff09;标准通信模式&#xff1a;MPI_SEND &#xff08;2&#xff09;缓存通信模式&#xff1a;MPI_BSEND &#xff08;3&#xff09;同步通信模式&#xff1a;MPI_SSEND &#xff08;4&#xff09;就绪通信…

shiro使用jdbc_realm登录验证

2019独角兽企业重金招聘Python工程师标准>>> pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven…

Javascript 严格模式详解

一、概述 除了正常运行模式&#xff0c;ECMAscript 5添加了第二种运行模式&#xff1a;"严格模式"&#xff08;strict mode&#xff09;。顾名思义&#xff0c;这种模式使得Javascript在更严格的条件下运行。 设立"严格模式"的目的&#xff0c;主要有以下几…

使用tableView崩溃

2019独角兽企业重金招聘Python工程师标准>>> 1错误2 正确 转载于:https://my.oschina.net/u/2601834/blog/618892

Java实现连连看源代码文档_Java实现游戏连连看(有源代码)

Java实现游戏连连看(有源代码) JAVA语言实现连连看游戏 1.课程设计目的 Java语言是当今流行的网络编程语言&#xff0c;它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法&#xff0c;它不仅具有更贴近自然的语义&#xff0c;而且有利于软…

C语言中auto,register,extern,static【转】

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 语言中提供了存储说明符auto&#xff0c;register&#xff0c;extern&#xff0c;stat…

SEO的十种赚钱方式

我深深的想要通过的自己的SEO技术赚钱。其实&#xff0c;掌握一门技术是次要方面&#xff0c;学会把技术变现才是重中之重&#xff0c;所以你说学习SEO重要吗?挺重要&#xff0c;但绝不是最重要的。学SEO的赚钱方式才是最重要的。那么SEO都有哪些赚钱方式呢?我罗列了十种赚钱…

Compile a native C Android application

2019独角兽企业重金招聘Python工程师标准>>> http://www.cnblogs.com/GoAhead/p/4186707.html 通过上网搜索&#xff0c;你可以发现很多种编译Android native应用的方法&#xff0e;我想说的是&#xff0c;不同的控制台应用, 守护程序(daemon), C/C库&#xff0c;等…

J2SE核心实战开发—— 集合类框架

文档都是基于 实验楼 线上环境制作的&#xff0c;因此文档叙述和截图均与其有关。使用其他实验环境也没有太大影响&#xff0c;知识点的操作是类似的。该系列的课程是在 实验楼 实习所原创的第一个课程&#xff0c;欢迎大家多提意见。 一、实验简介 在Java基础语法中&#xff0…