从0开始认识android(二):四大组件及Intent初识

该系列的文章只是本人的一些个人理解随笔,也深怕误人子弟,如果理解有错的地方还希望看到的朋友指正,不胜感激!!!  

  本篇主要是对android的四大组件Activity,Service,BroadcastReceiver和ContentPrivider及这四大组件间的启动Intent方式做一个初步认识,详细的在后面.以下引用的内容摘抄自安卓文档

 Activity
  Activity 表示具有用户界面的单一屏幕。例如,电子邮件应用可能具有一个显示新电子邮件列表的 Activity、一个用于撰写电子邮件的 Activity 以及一个用于阅读电子邮件的 Activity。 尽管这些 Activity 通过协作在电子邮件应用中形成了一种紧密结合的用户体验,但每一个 Activity 都独立于其他 Activity 而存在。 因此,其他应用可以启动其中任何一个 Activity(如果电子邮件应用允许)。 例如,相机应用可以启动电子邮件应用内用于撰写新电子邮件的 Activity,以便用户共享图片。

  即一个App的界面就对应一个Activity,用户是看的见的.开发技巧:假如你开发了两个应用A和B,如果这两个应用恰恰都需要一个相同的界面,那么你只需要在其中一个应用A中创建并配置这个界面,如果用户手机中都装了这两个应用,用户在使用B应用时,如果需要启动那个相同的界面,你B应用只需要去启动A应用中的那个界面就行了,不需要再B应用中重写一遍这个界面的代码了.

Service
  服务是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。 服务不提供用户界面。 例如,当用户位于其他应用中时,服务可能在后台播放音乐或者通过网络获取数据,但不会阻断用户与 Activity 的交互。 诸如 Activity 等其他组件可以启动服务,让其运行或与其绑定以便与其进行交互。

  对于服务,要搞清楚一点:即服务在后台运行,执行长时间操作.这里的长时间操作不是指UI线程中的耗时操作,即服务虽然可以在后台运行,但服务还是不能执行耗时操作的,根本原因还是因为服务中的代码也是运行在主线程中的.如果想让服务执行耗时操作,你可以在服务中开启子线程执行,也可以用IntentService代替Service.

ContentProvider
  内容提供程序管理一组共享的应用数据。您可以将数据存储在文件系统、SQLite 数据库、网络上或您的应用可以访问的任何其他永久性存储位置。 其他应用可以通过内容提供程序查询数据,甚至修改数据(如果内容提供程序允许)。 例如,Android 系统可提供管理用户联系人信息的内容提供程序。 因此,任何具有适当权限的应用都可以查询内容提供程序的某一部分(如 ContactsContract.Data),以读取和写入有关特定人员的信息。
  内容提供程序也适用于读取和写入您的应用不共享的私有数据。 例如,记事本示例应用使用内容提供程序来保存笔记.

  在上篇文章<<从0开始认识android(一):系统与进程的关系>>中我们知道:每个APP都是互相独立的,互相无法窥探对方的数据,如果非得窥探一下,除了之前提到的那两种共享数据的方法,就还有这里的内容提供者了.

BroadcastReceiver
  广播接收器是一种用于响应系统范围广播通知的组件。 许多广播都是由系统发起的 — 例如,通知屏幕已关闭、电池电量不足或已拍摄照片的广播。应用也可以发起广播 — 例如,通知其他应用某些数据已下载至设备,并且可供其使用。 尽管广播接收器不会显示用户界面,但它们可以创建状态栏通知,在发生广播事件时提醒用户。 但广播接收器更常见的用途只是作为通向其他组件的“通道”,设计用于执行极少量的工作。 例如,它可能会基于事件发起一项服务来执行某项工作。

  关于广播接受者的一个代码原则就是尽量别在里面执行过多的代码,你应用收到了需要的广播后执行其他操作时,可以开启其他组件来执行这些操作.至于为什么,目前不得而知,或许其设计原则就是这样的吧.

  初略了解了四大组件,那么这四大组件间是如何互动的呢?以下是每种组件的不同启动方法:
  

  您可以通过将 Intent 传递到 startActivity() 或 startActivityForResult()(当您想让 Activity 返回结果时)来启动 Activity(或为其安排新任务)。
  您可以通过将 Intent 传递到 startService() 来启动服务(或对执行中的服务下达新指令)。 或者,您也可以通过将 Intent 传递到 bindService() 来绑定到该服务。
  您可以通过将 Intent 传递到 sendBroadcast()、sendOrderedBroadcast() 或 sendStickyBroadcast() 等方法来发起广播;
  您可以通过在 ContentResolver 上调用 query() 来对内容提供程序执行查询。

  需要注意的是:由于安全考虑,当系统启动某个组件时,会启动该应用的进程(如果尚未运行),并实例化该组件所需的类。 例如,如果您的应用启动相机应用中拍摄照片的 Activity,则该 Activity 会在属于相机应用的进程,而不是您的应用的进程中运行.
  四种组件类型中的三种 — Activity、服务和广播接收器 可以通过 Intent 进行启动。而内容提供者则不能通过Intenet来启动.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值