Activity:是所有Android应用程序的门面,凡是在应用中你看到的东西,都是在里面。每一个Activity都独立于其他Activity而存在。因此,其他应用可以启动其中任何一个Activity(当然得应用允许)
Service:是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业,服务不提供用户界面。例如,当用户位于其他应用时,服务可能在后台播放音乐或者通过网络获取数据
Broadcast Receiver:用于响应系统范围广播通知的组件。接收来自各处的广播消息,比如短信、电话,屏幕,当然应用也可以向外发出广播消息。尽管广播接收器不会显示用户界面,但他们可以创建状态栏通知,在发生广播事件的时候提醒用户
由于系统在单独的进程中运行每个应用,且其文件权限会限制对其他应用的访问,因此您的应用无法直接启动其他应用中的组件, 但 Android 系统却可以。因此,要想启动其他应用中的组件,您必须向系统传递一则消息,说明您想启动特定组件的 Intent。 系统随后便会为您启动该组件。
四种组件类型中的三种 — Activity、服务和广播接收器 — 通过名为 Intent 的异步消息进行启动。Intent 会在运行时将各个组件相互绑定(您可以将 Intent 视为从其他组件请求操作的信使),无论组件属于您的应用还是其他应用。
所以需要注意几点:
main()
函数)。
在 Android 系统启动应用组件之前,系统必须通过读取应用的 AndroidManifest.xml
文件(“清单”文件)确认组件存在。 您的应用必须在此文件中声明其所有组件,该文件必须位于应用项目目录的根目录中。
除了声明应用的组件外,清单文件还有许多其他作用,如:
1、设定一个首页
所有的Activity都要在的 AndroidManifest.xml文件里注册,否则不能使用,不过Android Studio会自动帮我们做这个操作,但是如果要设定一个activity为主页,则需要添加intent-filter表情,比如,要设置一个名称为FirstActivity为首页
<activity android:name=".FirstActivity"
android:label="this is FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
上面两个标签必须同时有,缺一不可。
Intent是一个消息传递对象,您可以使用它从其他应用组件请求操作,基本用例主要包括以下三个
Intent 分为两种类型:
注意:为了确保应用的安全性,启动
Service
时,请始终使用显式 Intent,且不要为服务声明 Intent 过滤器。使用隐式 Intent 启动服务存在安全隐患,因为您无法确定哪些服务将响应 Intent,且用户无法看到哪些服务已启动。从 Android 5.0(API 级别 21)开始,如果使用隐式 Intent 调用bindService()
,系统会引发异常。
Intent 过滤器是应用清单文件中的一个表达式,它指定该组件要接收的 Intent 类型。
请在清单文件中使用intent-filter元素为每个应用组件声明一个或多个 Intent 过滤器。每个 Intent 过滤器均根据 Intent 的操作、数据和类别指定自身接受的 Intent 类型。 仅当隐式 Intent 可以通过 Intent 过滤器之一传递时,系统才会将该 Intent 传递给应用组件。
创建隐式 Intent 时,Android 系统通过将 Intent 的内容与在设备上其他应用的清单文件中声明的 Intent 过滤器进行比较,从而找到要启动的相应组件。 如果 Intent 与 Intent 过滤器匹配,则系统将启动该组件,并向其传递 Intent
对象。 如果多个 Intent 过滤器兼容,则系统会显示一个对话框,支持用户选取要使用的应用。
您可以使用以下三个元素中的一个或多个指定要接受的 Intent 类型:
Intent
对象携带了 Android 系统用来确定要启动哪个组件的信息,以及目标组件为了正确执行操作而使用的信息,主要包含:
组件名称:可选项,如果隐式则根据其他信息来判断
需要在AndroidManifest.xml中通过标签指定android:lanuchMode属性来选择启动模式
可选值有三种:match_parent,fill_parent,和wrap_content,match_parent和fill_parent一样都是跟父布局大小一致。wrap_parent则是由内容来觉得,也就是刚好包住内容。
根据控件间的相互约束来决定布局,2017年推出,成为主流布局方式
将所有包含的控件在线性方向上依次排列,通过android:orientation属性可以指定排列方向,vertical是竖直方向,horizontal是水平方向。默认是水平方向。还有个属性layout_weiht,用来按比例分布排列
通过相对定位的方式让控件出现在布局的任何位置,主要是利用控件间对齐来布局,属性比较多
所有的控件默认拜访在布局的左上角,应用较少
根据百分比来布局
Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。服务可由其他应用组件启动(如Activity),服务一旦被启动将在后台一直运行,即使启动服务的组件(Activity)已销毁也不受影响。 此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC)。 例如,服务可以处理网络事务、播放音乐,执行文件 I/O 或与内容提供程序交互,而所有这一切均可在后台进行,Service基本上分为两种形式:
当应用组件(如 Activity)通过调用 startService() 启动服务时,服务即处于“启动”状态。一旦启动,服务即可在后台无限期运行,即使启动服务的组件已被销毁也不受影响,除非手动调用才能停止服务, 已启动的服务通常是执行单一操作,而且不会将结果返回给调用方。
当应用组件通过调用 bindService() 绑定到服务时,服务即处于“绑定”状态。绑定服务提供了一个客户端-服务器接口,允许组件与服务进行交互、发送请求、获取结果,甚至是利用进程间通信 (IPC) 跨进程执行这些操作。 仅当与另一个应用组件绑定时,绑定服务才会运行。 多个组件可以同时绑定到该服务,但全部取消绑定后,该服务即会被销毁。