6、四大组件之二-Service初步
一、什么是Service
有些用时比较长得操作我们希望他在后台运行 ,不耽误我们当前的操作 。 这就引入了Service概念 。
常见的比如:访问网络 , 文件IO操作 , 大数据的数据库任务,播放音乐等 。
Service在后台运行,不与用户进行交互。在默认情况下,Service运行在应用程序进程的主线程中,如果需要在Service中处理一些网络连接等耗时的操作,那么应该将这些仸务放在单独的线程中处理,避免阻塞用户界面
二、Question
1,启动服务后,按Home键,服务是否还在运行? Yes
2,启动服务后,退出进程,是否服务还会运行? NO
3,启动服务,不用多线程,界面是否会阻塞? Yes
4,服务是个新的进程么,服务是个新的线程么?
.服务不是一个新的进程,也不是一个新的线程 。 与当前进程绑定的
三、Service的分类
按照启动方式分类:
=== < Started Service > ===
1,startService()来启动
2,一旦启动,就运行在后台,即便启动它的对象(Activity)都销毁了
3,通常只启动,不返回值
4,通常网络上传或者下载,操作完成后,自动停止
=== onStartCommand() ===
< Bound Service >
1,bindService()来绑定
2,提供客户端服务器接口来启动
3,发送请求,得到返回值,甚至通过IPC来通讯
4,一个服务可以被多个调用者绑定,只要有一个绑定者,服务运行,所有绑定者都退出,服务退出
onBind()
按服务性质分:Local Service、Remote Service。
(1). 本地服务(Local Service):说白了就是在同一个apk内被调用。
(2). 远程服务(Remote
Sercie):被另外一个apk调用。
按实现方法分类:Java Service、Native Service。
四、生命周期

Service只有在系统资源不足的时候才有可能被系统销毁。值得注意的是:
Service如果正在bind状态,很少会被销毁,如果服务运行在前台,几乎不会被销毁。
五、创建及使用StartedService步骤
创建Service–继承android.app.Service实现自己的服务–必须在AndroidManifest.xml注册service必须在AndroidManifest.xml注册service
启动service–startService(i);
停止service–stopService(i);
1 继承Service类实现自己的服务
2 在AndroidManifest中注册服务
3 启动服务startService()
4停止服务stopService() stopSelf()
onStartCommand() 返回值:
START_STICKY START_NOT_STICKY START_REDELIVER_INTENT
集成Service和IntentService的区别?
所有服务的基类,我们要实现服务就需要继承这个类
。IntentService:
异步处理服务
,新开了一个线程:HandlerThread
在线程中发消息
,然后接收
处理完成后
, 会清除线程 ,并且关掉服务 。
六、绑定及使用Boundservice的步骤 <介绍Binder>
Local BoundService
1 继承Service或者IntentService类实现自己的服务
2 在AndroidManifest中注册服务
3 绑定服务bindService()
4 取消绑定服务unbindService()
Messenger
AIDL
【FAQ:思考】
boundService - 绑定(onBind)和连接(onServiceConnected)两个方法谁先执行? onBind
相类似的onUnBind 和 onServiceDisconnected呢?
onUnBind
理解清楚了binder的作用么?
七、StartedService & BoundService 区别
两种服务最本质区别
:
boundService 其实是有一个客户端,服务器端的概念。借助于Binder
来通讯。
1,StartedService 和启动它的Activity不同生共死
BoundService 和启动它的Activity同生共死
2,无论是start or bind ,只要service没有实例化,就都会被create
。 但start 每次都会调用onStartCommand
。bind , 则如果已经绑定,就不再调用onBind了
。
八、在前台运行服务
何时会用到前台服务?
有的时候
, 我们不希望后台服务被系统在资源不够用的时候杀死,所以就会把服务设定为前台服务
。
比如音乐播放器,在后台播放的时候,我们就不希望被杀死
。
启动方式:startForground(int , notification)。
九、扩展:Native Service (详见下一章节)
什么是Native Service
何时会用到Native Service
如何调用
十、扩展:Service运行中如何与用户交互
Toast Notification
StatusBar Notification
十一、如何在Service和线程之间选择?
1 Service是一个很方便的组件让你运行后台操作,并且不影响当前操作。
2当你需要在你当前操作的时候另外起一个更独立操作时候可以考虑线程,比如当前程序不关闭的情况下运行音乐。
3从逻辑上你认为需要一个后台操作,但跟我们现在主线程操作通讯频繁,逻辑关系紧密,就用多线程(直接用)。
4能够从逻辑上区分开来,就用后台服务。
十二、FAQ:思考
1>Service是一个新的进程或者新的线程么?
2>startedService 和
boundService区别?
3>activity和service是否在同一个进程和线程中?
默认情况下,这两个组件都在同一个进程中,但是不是同一个线程,activity为前台进程,service是后台进程,当android系统资源紧张的时候davlik虚拟机会首先寻找前台进程进行资源的释放,其次才是一些后台进程,所以通常我们把长时间运行的模
6、四大组件之二-Service初步的更多相关文章
- Android 四大组件之二(Service)
service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务 ...
- [Android四大组件之二]——Service
Service是Android中四大组件之一,在Android开发中起到非常重要的作用,它运行在后台,不与用户进行交互. 1.Service的继承关系: java.lang.Object → andr ...
- 11、四大组件之二-Service高级(二)Native Service
一.Service的分类 1.1>Android Service 使用Java编写在JVM中运行的服务 1.2>Native Service 使用C/C++完成的服务,一般在系统开始时完成 ...
- 7、四大组件之二-Service高级
一.Native Service 1>什么是Native Service 使用JNI编写,在系统启动完成之前启动的系统级服务. 2>哪些服务是Native Service ACCESSIB ...
- Android四大组件之服务-Service 原理和应用开发详解
一.Android 服务简介 Service是android 系统中的四大组件之一(Activity.Service.BroadcastReceiver.ContentProvider),它跟Acti ...
- Android四大组件初识之Service
Service作为Android四大组件之一,可以与Activity建立双向连接(绑定模式),提供数据和功能.也能够接收Intent单方面请求(调用模式),进行数据处理和调度功能. Service与A ...
- 入职小白随笔之Android四大组件——服务(Service)
Service Android多线程编程 当我们在程序中执行一些耗时操作时,比如发起一条网络请求,考虑到网速等原因,服务器未必会立刻响应我们的请求,此时我们就需要将这些操作放在子线程中去运行,以防止主 ...
- Android四大组件之一:Service(服务)
Service跟Activity也是出于统一级别的组件,且与Activity的最大区别之一主要是没有人机界面,主要是运行在程序的后台(我是这么理解的),帮助文档上说的是运行于进程的主线程中,但是服务并 ...
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
转载于:http://blog.csdn.net/byxdaz/article/details/9708491 http://blog.csdn.net/q876266464/article/deta ...
随机推荐
- EvnetBus
领域事件(EvnetBus) 文档目录 本节内容: EventBus 注入 IEventBus 获取默认实例 定义事件 预定义事件 处理完异常 实体修改 触发事件 处理事件 处理基类事件 处理程序 ...
- ios App 打包
ios 版本的 App 打包两种方式: 1. 命令行 xcodebuild exportArchive -exportFormat ipa 2. 通过 xcode Product -> Arch ...
- struts2拦截器-简单实现非法登录验证
概念:什么是拦截器 拦截器实现了面向切面的组件,它会影响多个业务对象的公共行为封装到一个个可重用的模块,减少了系统的重复代码,实现高度内聚,确保业务对象的整洁! 为什么使用拦截器 拦截器消除了动作 ...
- 带括号的四则混合运算的算符优先算法-----java实现
1:主方法 package com.baidu; import java.text.NumberFormat;import java.util.ArrayList;import java.util.S ...
- spoj 1437
自己暴了一下不过 转一个 bfs... #include <cstdio> #include <vector> #include <queue> #incl ...
- 认识RGB和YUV
多年来,对于大部分人来说,对图形信号的认识不外有三种:射频信号,复合视频信号,S视频信号.射频信号是由复合视频信号调到高频上,普通电视机的天线输入信号用于射频信号,复合视频信号的输入出是用RGA端子. ...
- TaskTracker执行map或reduce任务的过程(二)
上次说到,当MapLauncher或ReduceLancher(用于执行任务的线程,它们扩展自TaskLauncher),从它们所维护的LinkedList也即队列中获取到TaskInProgress ...
- python List&Set&Dict交集、并集、差集
1.python List交集.并集.差集 1). 获取两个list 的交集#方法一: a=[2,3,4,5] b=[2,5,8] tmp = [val for val in a if val in ...
- SOCKS5协议
SOCKS5 是一个代理协议,这种协议对本身所代理的内容并不关心,可用于穿越防火墙. 例如我有一台web服务器,用户可以登陆上去查询公司的关键数据,这样的服务器我肯定是不想放到公网上让别人能随便访问, ...
- 初始化一台linux server来做项目管理和测试
毕业以后很多没做过这么技术的事情了,不过今年要开始咯. Goal: 练手安装Nginx,并且配置不同的server,后端有Tomcat的(JIRA),有PHP(总得有的),还有Tornado和Node ...