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 ...
随机推荐
- 在Hadoop分布式文件系统的索引和搜索
FROM:http://www.drdobbs.com/parallel/indexing-and-searching-on-a-hadoop-distr/226300241?pgno=3 在今天的信 ...
- linux内核分析之进程地址空间管理
1.struct task_struct 进程内核栈是操作系统为管理每一个进程而分配的一个4k或者8k内存大小的一片内存区域,里面存放了一个进程的所有信息,它能够完整的描述一个正在执行的程序:它打开的 ...
- PAT-乙级-1037. 在霍格沃茨找零钱(20)
1037. 在霍格沃茨找零钱(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 如果你是哈利·波特迷,你会知 ...
- PAT-乙级-1009. 说反话 (20)
1009. 说反话 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一句英语,要求你编写程序,将句中 ...
- ural 1160
最小生成树 第一次敲 套用几个函数 其实挺容易的 #include <cstdio> #include <cstring> #include <vector> # ...
- 建立Clojure开发环境-使用IDEA和Leiningen
OS: Mac OS X 10.10 IDEA 14.0.2 Community Edition 安装Leiningen 按照http://leiningen.org/的指南安装lein 阅读Lein ...
- python语法-[with来自动释放对象]
python语法-[with来自动释放对象] http://www.cnblogs.com/itech/archive/2011/01/13/1934779.html 一 with python中的w ...
- Visual Leak Detector 2.2.3 Visual C++内存检测工具
Visual Leak Detector是一款免费的.健全的.开源的Visual C++内存泄露检测系统.相比Visual C++自带的内存检测机制,Visual Leak Detector可以显 ...
- UINavigationController使用详解
UINavigationController使用详解 有一阵子没有写随笔,感觉有点儿手生.一个多月以后终于又一次坐下来静下心写随笔,记录自己的学习笔记,也希望能够帮到大家. 废话少说回到正题,UINa ...
- delphi 反射(原理)
关于反射的用途是『降低模块间的耦合度』这个倒未必尽然 单就delphi来说,从实现上看,它的所谓反射是基于RTTI,而RTTI的出现按照官方的说法是为了实现RAD中窗体文件DFM的持久化而产生的,其实 ...