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 ...
随机推荐
- putty连接linux as5 输入密码后连接中断
putty连接linux as5 输入密码后连接中断 1.修改putty首页的设置,选择“close session on exit” 为 “never”,之后发现输入密码后,“session clo ...
- BZOJ 1697: [Usaco2007 Feb]Cow Sorting牛排序
Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大的牛有可能会捣乱,JOHN想把牛按脾气的大小排序.每一头牛的脾气都是一个 ...
- PAT-乙级-1035. 插入与归并(25)
1035. 插入与归并(25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 根据维基百科的定义: 插入排序是迭 ...
- 手工、工具分别实现cookie注入
最开始的判断access类型的网站注入点可以用“1 and 1=1”来判断. 不过现在的网站基本上被挡住了.之后呢,可以考虑cookie注入. Dim Tc_Post,Tc_Get,Tc_In,Tc_ ...
- uva 11151
求最长回文串 就是将字符串翻转后求最长公子列..... #include <cstdio> #include <cstdlib> #include <algorithm ...
- C++开发必看 四种强制类型转换的总结
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. const_cast ...
- 深入浅出ShellExecute
Q: 如何打开一个应用程序? ShellExecute(this->m_hWnd,"open","calc.exe",""," ...
- 如何在eclipse里使用git
新版都自带git插件了.在项目上右键,选team,选share project,再选择git就可以了. 如果在本地使用git比较简单.如果要多人共享的使用git,那么需要专门的服务器,并提供ssh,这 ...
- Servlet课程0426(十二)Servlet MV模式下用户登录及查看用户表中所有用户
Welcome.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; import java ...
- 选择Android还是选择JavaEE?
很多同学咨询过同样的一个问题,该问题也是最备受争议的问题,那就是到底是选择Android还是选择JavaEE.下面发表一些本人的看法. Android属于一个特有的Java技术应用,专注于 ...