Andoid学习路(二)

图片发自简书App

前面写了四大组件的Activity,稍微详细的描述了它的生命周期和启动模式。今天接着写其余的三大组件Service、BroadcastReceiver、ContentProvider.

1.Service

Service是 Android 中实现程序后台运行的解决方案,它非常适合用于去执行那些不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖于任何用户界面,即使当程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持正常运行。不过需要注意的是,服务并不是运行在一个独立的进程当中的,而是依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停止运行。

Service的启动过程从ContextWrapper的startService开始。在ContextImpl中,startService方法调用startServiceCommen方法,而startServiceCommen方法会通过ActivityManagerNative.getDefault()这个对象来启动一个服务。

服务的使用,通常情况下,如果我们希望服务一旦启动就立刻去执行某个动作,就可以将逻辑写在onStartCommand()方法里。而当服务销毁时,我们应该在 onDestroy()方法中去回收那些不再使用的资源。另外需要注意,每一个服务都需要在 AndroidManifest.xml 文件中进行注册才能生效

2.BroadcastReceiver

Android 中的广播主要可以分为两种类型,标准广播和有序广播。

标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。

有序广播(Ordered broadcasts)则是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时的广播接收器是有先后顺序的,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了。

广播的使用方法,首先要定义广播接收者,只需要继承BroadcastReceiver并重写onReceive方法就可以了。需要注意的是定义好了广播接收者还需要注册广播接收者,可以在AndroidManifest文件中静态注册,也可以通过代码动态注册。动态注册的广播需要在合适的时机采用unregisterReceiver进行解注册。

3.ContentProvider

内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性。目前,使用内容提供器是 Android 实现跨程序共享数据的标准方式。

对于每一个应用程序来说,如果想要访问内容提供器中共享的数据,就一定要借助ContentResolve 类,可以通过 Context 中的 getContentResolver()方法获取到该类的实例。ContentResolver 中提供了一系列的方法用于对数据进行 CRUD 操作,其中 insert()方法用于添加数据,update()方法用于更新数据,delete()方法用于删除数据,query()方法用于查询数据。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,726评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,884评论 6 13
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,791评论 25 709
  • 人生中遇到了这么一时刻,好像进退皆由你,结果你也好像都明白。驻足了很久,你该怎么做。
    七月上的冥王星阅读 1,313评论 0 0
  • 小宝今天是第四天去上学了,今天由我送去,一直哭着说:“我不去读书了,我要回去。”……到了幼儿园哭得更大声,似乎用尽...
    艾兰英子阅读 3,301评论 0 0