Android学习之Service(一)
来源:互联网 发布:55开淘宝店地址 编辑:程序博客网 时间:2024/05/22 16:02
Service
Service为Android的四大组件之一,它被用来执行一些不需要和用户交互的以及运行时间长的任务,一个活动可以启动一个服务,它将继续在后台运行,即使用户切换到另一个应用。
Service可以分为两种基本类型:
#
- started
如果一个应用程序组件(比如一个activity)通过调用startService()来启动服务,则该服务就是被“started”了。一旦被启动,服务就能在后台一直运行下去,即使启动它的组件已经被销毁了。 通常,started的服务执行单一的操作并且不会向调用者返回结果。比如,它可以通过网络下载或上传文件。当操作完成后,服务应该自行终止。 - bound
如果一个应用程序组件通过调用bindService()绑定到服务上,则该服务就是被“bound”了。bound服务提供了一个客户端/服务器接口,允许组件与服务进行交互、发送请求、获取结果,甚至可以利用进程间通信(IPC)跨进程执行这些操作。绑定服务的生存期和被绑定的应用程序组件一致。 多个组件可以同时与一个服务绑定,不过所有的组件解除绑定后,服务也就会被销毁。
下图为官方给出的Service生命周期
服务的完整生存期开始于onCreate()调用时,结束于onDestroy()返回时。与activity类似,服务在onCreate()中完成初始设置工作,并在onDestroy()中释放所有未释放的资源。例如,一个音乐播放服务可以在onCreate()中创建音乐播放线程,而在onDestroy()中终止该线程。 不管是用startService()创建的,还是用bindService()创建的,所有的服务都会调用onCreate()和onDestroy()方法。
服务的活跃生存期开始于onStartCommand()或onBind()的调用。这两个方法分别会传入传给startService()或bindService()的 Intent。 如果服务是started的,则活跃生存期与完整生存期同时结束(即使onStartCommand()返回后,服务仍然处于活跃期。)如果服务是bound的,则活跃生存期在 onUnbind() 返回后结束。
#
定义一个服务
定义一个服务即声明一个继承于Service的类,该类有一个抽象方法onBind()
定义服务之后需要在manifest文件中声明
<manifest ... > ... <application ... > <service android:name=".ExampleService" /> ... </application></manifest>
在<service>元素中可以包含很多其它属性,比如定义启动服务所需权限、服务运行的进程之类的属性。android:name是唯一必需的属性——它定义了服务的类名。
#
启动及停止服务
#
Intent startIntent = new Intent(this,MyService.class);startService(startIntent);//启动服务
Intent stopIntent = new Intent(this,MyService.class);stopService(stopIntent);//停止服务
在启动服务时,会调用onCreate()方法和onStartCommand()方法,但onCreate()方法仅在第一次创建时调用,而onStartCommand()方法可以被多次调用。
#
1 0
- android基础学习之Service(一)
- Android学习之Service(一)
- android service 学习 (一)
- android之service(一)
- Android四大组件之Service服务学习笔记(一)
- Android开发学习之Service详解一
- Android学习 Service(一)之如何写一个最基本的Service
- android service学习一
- Android之Service一
- Android之Service(一)
- android ApiDemo学习(一)service总结
- <Android> Service详解 学习(一)
- Android 学习笔记 Service (一) Local Service
- Android之Service用法(一)
- Android基础系列之Service(一)
- Android之Service(一):服务简介
- Android初学之Service(一)
- Android进阶之(Service详解一)
- 2个有序数组,找出相同元素
- 51nod 算法马拉松22 完全图的最小生成树计数 【Trie树+图论】
- alter和modify的区别
- python面向对象基本知识
- 前端技能练习:对于li这个节点,下列哪个 CSS 选择器的优先级最高?
- Android学习之Service(一)
- 设计模式笔记二十四:模板模式
- JavaWeb开发
- Ubuntu12.04调整系统字体大小
- JavaScript 日期对象Date(声明/Date对象的方法/返回距离1970/01/01毫秒数)
- cin/cou效率太慢?试一下 ios::sync_with_stdio(false);
- 对matlab生成的图形编辑修改
- 关于向量的点乘和叉乘的基本知识
- [暴力 树形DP] Codeforces Gym 100553H NEERC14 H. Hidden Maze