Android6.0之AMS管理Service前奏

来源:互联网 发布:七政四余软件下载 编辑:程序博客网 时间:2024/06/07 03:51

前面分析了AMS使如何启动一个Activity的,现在开始分析AMS如何启动一个service。那么在分析AMS管理Service的源码之前,先要知道在App有哪些使用Service的方法。

概述

Service是Android中实现程序后台运行的解决方案,非常适合用于去执行哪些不需要和用户交互而且还要求长期运行的任务。

一般情况下,service和activity都是运行在ui主线程的,所以service中不能处理太耗时的逻辑,否则容易引起ANR异常。可以通过android:process属性指定service运行在一个独立的进程中。

大多数情况下使用的service都是只能在后台运行,但也有前台Service,此时service将会在通知栏中显示。例如,一个从service播放音乐的音乐播放器,应被设置为前台运行,因为用户会明确地注意它的运行。

要知道在App开发中如何定义一个Service,如何启动一个Service,如何停止一个Service和service的生命周期。

Service种类

Service按照使用场景分为两类:Local Service和remote service。

Local Service:

Client跟Service 一般不能相互反馈,一般也在同一个进程中,如果在统一进程中,那么service运行在主线程中。当然也可以运行在一个独立进程中。

通过调用应用程序组件(例如Activity)的startService()方法来启动一个服务.一旦启动,服务就会在后台一直运行,即使应用程序组件此时被关闭.通常,已经启动的服务会处理一些单一功能,并且也不需要返回结果给调用者.例如,在网络上下载或上传文件.当服务的工作处理结束,才会自己关闭服务。也可调用stopService()结束service。

这类服务有个特点,就是它主要用于为某一个组件,比如Activity提供单独的后台服务,Client 和 Service是不能相互沟通的。

如果Service运行在app进程中,也就是没有在独立进程中,那么就运行在主线程中,所以考虑引起ANR异常的问题。

Remote Service

Client跟Service可以不在同一个进程.

通过调用应用程序组件的bindService()方法来绑定一个服务.已绑定的服务会提供一个客户端-服务端交互接口.该接口主要用来与应用程序交互,发送请求,获取结果,甚至通过IPC来访问进程.只要一个程序组件绑定服务,就会运行绑定服务,多个应用程序组件可以同时时间绑定一个服务.当所有的应用程序组件都解除绑定,该绑定服务器就会被销毁.

这类服务有个特点,就是它会定义一些接口并把接口暴露出来,以便其他应用进行操作。Client 和 Service 能相互沟通的。

Service按照是否需要和用户交互,可分为两大类:前台Service 和 后台Service。

后台Service

Service一般都是后台运行的Service(无需与用户交互);因为Service的系统优先级还是比较低的,当系统出现内存不足情况时,就有可能会回收掉正在后台运行的Service。

前台Service

需要和用户交互的Service,它会一直有一个正在运行的图标在系统的状态栏显示,下拉状态栏后可以看到更加详细的信息,非常类似于通知的效果。

###

http://www.cnblogs.com/smyhvae/p/4070518.html

0 0
原创粉丝点击