其实我们往往只看到表面,而往往忽视内在。就像Android一样,我们总是看到Fragment、Activity,但却往往看不到在后台默默为我们服务的Intend、Broadcast Receiver、Service、Alarm等。他们在定时通知、广播接收、接收消息推送方面起着巨大的作用。下面我们来一起了解一下吧。
看了网上一大堆的intent的解释,不是说别人写的不好,而是说我自己确实能力有限,我连一些定义概念都看不懂,又怎么会有耐心看完长达两三千字的文章呢。所以我结合了一些官网知识,和百度搜索的,书本知识的,进行了如下总结:
首先从会出现的每一个概念入手:
四大组件:
Activity:一个可以展示信息的并且交互的用户页面
Service:在后台处理一些事务,如网络获取数据等长时间响应的
Broadcast Receiver:用来响应系统广播通知的组件,例如可以显示通知栏消息等。
Content Provider:管理一组共享的应用数据,当然也可以写入不共享的信息。其他应用程序可以读取或修改共享的信息。
那么我如何来启动这些组件呢?通过Intent。
Intent:是其他组件请求操作的信使。通过异步请求,将Service、Broadcast Receiver、Service相互绑定。定义的消息用于启动特定组件或特定类型的组件,分为显式和隐式。(何为显式和隐式,就是看得见和看不见两种)
1、对于Activity、Service而言,Intent定义要执行的操作,“查看”或者“发送”某个内容(被请求的Activity可能需要了解的信息),比如打开另一个查看图片的Activity。当然,您也可以启动Activity来接受结果,Activity会在intent中返回一个结果,比如选取图片后,返回给调用者一个URI。
2、对于广播接收器,只是定义要广播的通知。比如指示设备电量不足,就提示“设备电量不足”,等已知的操作字符串。
不同组件有不同启动方法,
Activity:startActivity(),startActivityForResult()(如果想看到返回结果的话)
Service:startService(),来启动服务,或向执行中的服务下达新的指令。Intent通过bindService()来绑定服务(旨在使用客户端-服务器接口)
Broadcast:通过intent传递到sendBroadcast(),sendOrderedBroadcast(),sendStickBroadcast()等方法来发起广播。
Intent是一个消息传递对象
https://developer.android.google.cn/guide/components/intents-filters
这个是谷歌官方的真的非常推荐,说的非常详细。本来确确实实想自己总结一下子来,结果看到了官方文档。官方文档你看过一遍之后,你绝对阔以胜任所有Android日常开发工作了。
清单文件:是系统启动程序前必须读取的文件,里面必须声明所有组件,确认组件的存在。还有如权限、API、需要的硬件或功能都需要在此声明。
声明时的框框:
Activity 的 元素
服务的 元素
广播接收器的 元素
内容提供程序的 元素
(广播接收器可以在清单文件中声明或在代码中动态创建(如 BroadcastReceiver 对象)并通过调用 registerReceiver() 在系统中注册)