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 ...
随机推荐
- JVM -XX: 参数介绍(转)
垃圾回收器相关常用参数: 功能开关: 参数 默认值或限制 说明 参数 默认值 功能 -XX:-AllowUserSignalHandlers 限于Linux和Solaris,默认不启用 允许为java ...
- 3141: [Hnoi2013]旅行 - BZOJ
Description Input 第一行为两个空格隔开的正整数n, m,表示旅行的城市数与旅行所花的月数.接下来n行,其中第 i行包含两个空格隔开的整数Ai和Bi,Ai表示他第i个去的城市编号.Bi ...
- java对象数组
问题描述: java 对象数组的使用 问题解决: 数组元素可以是任何类型(只要所有元素具有相同的类型) 数组元素可以是基本数据类型 数组元素也可以是类对象,称这样的数组为对象数组.在这种情况下 ...
- [转载]mvc使用JsonResult返回Json数据
controller 中定义以下方法: public JsonResult UpdateSingle(int id, string actionName, string actionValue) { ...
- spoj 42
简单题 水水~~ /************************************************************************* > Author: x ...
- oracle SQLserver 函数
1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value ...
- HDU 1203 I NEED A OFFER!(01 背包DP)
点我看题目 题意 : 中文题不详述. 思路 :类似于01背包的DP,就是放与不放的问题,不过这个要求概率,至少得到一份offer的反面就是一份也得不到,所以先求一份也得不到的概率,用1减掉就可以得到所 ...
- hadoop No FileSystem for scheme: hdfs
http://stackoverflow.com/questions/17265002/hadoop-no-filesystem-for-scheme-file This is a typical c ...
- java jdbc dbcp连接SQL Server
使用到的jar: commons-collections-3.1.jar commons-dbcp-1.4.jar commons-pool-1.5.6.jar sqljdbc4.jar dbcp配置 ...
- http://www.cnblogs.com/doit8791/p/4093808.html
http://www.cnblogs.com/doit8791/p/4093808.html