Android中为什么需要服务?
2016-08-26 15:28
295 查看
在解释这个问题之前, 先来看一个Android系统中进程的优先级(从高到低)
前台进程(foreground process ): 一个应用程序启动, 并且可以直接相应用户的点击,触摸事件.那么这样 进程就是前台进程, 它的优先级的最高的.
可视进程(visible process) : 一个应用程序也启动了, 本来是直接处于前台,可以直接相应用户的触摸, 点击事件的,但是 现在一个其他的的应用程序盖住了它,但是还看得见. 那么这种进程称之为 可视进程.
服务进程(service process ): 一个应用程序 如果正常的退出了,但是这个应用程序启动的时候, 有一个服务启动了, 一直在后台运行, 那么这种进程就是属于 服务进程.
后台进程(background process): 一个应用程序 启动了(但是这个应用程序中没有 服务在运行了), 这个时候 点击了 home键(小房子), 那么这种进程就是属于 后台进程
空进程(empty process) : 一个应用程序,现在正常的退出了,没有任何组件在继续运行着, 那么这种进程称之为 空进程.
由此可见, Service对于android系统来说,杀死的优先级别是比较低的,一般不会杀死service, 这就保证了Service可以长期在后台运行.
另外, Service是没有界面的, 也是运行在主线程中的,所以如果要在Service中执行耗时的操作,需要新建一条线程.
使用:在Service可以调用Context.startService()启动,调用Context.stopService()结束。在内部可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。无论调用了多少次startService(),都只需调用一次stopService()来停止。
使用:可以定义接口并把接口暴露出来,以便其他应用进行操作。客户端建立到服务对象的连接,并通过那个连接来调用服务。调用Context.bindService()方法建立连接,并启动,以调用 Context.unbindService()关闭连接。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。
前台进程(foreground process ): 一个应用程序启动, 并且可以直接相应用户的点击,触摸事件.那么这样 进程就是前台进程, 它的优先级的最高的.
可视进程(visible process) : 一个应用程序也启动了, 本来是直接处于前台,可以直接相应用户的触摸, 点击事件的,但是 现在一个其他的的应用程序盖住了它,但是还看得见. 那么这种进程称之为 可视进程.
服务进程(service process ): 一个应用程序 如果正常的退出了,但是这个应用程序启动的时候, 有一个服务启动了, 一直在后台运行, 那么这种进程就是属于 服务进程.
后台进程(background process): 一个应用程序 启动了(但是这个应用程序中没有 服务在运行了), 这个时候 点击了 home键(小房子), 那么这种进程就是属于 后台进程
空进程(empty process) : 一个应用程序,现在正常的退出了,没有任何组件在继续运行着, 那么这种进程称之为 空进程.
由此可见, Service对于android系统来说,杀死的优先级别是比较低的,一般不会杀死service, 这就保证了Service可以长期在后台运行.
另外, Service是没有界面的, 也是运行在主线程中的,所以如果要在Service中执行耗时的操作,需要新建一条线程.
服务分为两种:
1.本地服务(Local Service):用于应用程序内部
功能:用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好。使用:在Service可以调用Context.startService()启动,调用Context.stopService()结束。在内部可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。无论调用了多少次startService(),都只需调用一次stopService()来停止。
2.远程服务(Remote Sercie):用于android系统内部的应用程序之间
功能:可被其他应用程序复用,比如天气预报服务,其他应用程序不需要再写这样的服务,调用已有的即可。使用:可以定义接口并把接口暴露出来,以便其他应用进行操作。客户端建立到服务对象的连接,并通过那个连接来调用服务。调用Context.bindService()方法建立连接,并启动,以调用 Context.unbindService()关闭连接。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。
相关文章推荐
- Android中为什么需要服务?
- Android服务Service详解(作用,生命周期,AIDL)系列文章-为什么需要服务呢?
- 企业为什么需要IT服务台(一)
- 企业为什么需要IT服务台(二)
- C/C++/IOS/Android/MFC/python等软件定制服务,有人需要吗?
- 为什么通信服务提供商需要实现SD-WAN
- 为什么通信服务提供商需要实现SD-WAN
- 架构Web Service:为什么需要Web服务?
- 为什么需要Web服务
- android之为什么使用服务
- 为什么Android系统需要使用C、C++和Java语言共同开发
- Android使用service的bind方式使用服务的使用需要注意的一个问题
- 艾伟_转载:ASP.NET Forms验证的安全性问题研究——为什么加密代码需要配置为服务
- android 为什么需要cygwin
- 在Android上实现SSL握手(客户端需要密钥和证书),实现服务
- 为什么 Android 截屏需要 root 权限
- 架构Web Service:为什么需要Web服务?
- 为什么Android系统需要使用C、C++和Java语言共同开发
- 一张图讲解为什么需要自己搭建自己的git服务以及搭建的途径
- [转]架构Web Service: 为什么需要Web服务?