Android学习--Service初步

转载 2012年03月31日 11:18:38

1.Service概述

由于手机屏幕的限制,通常情况下在同一时刻仅有一个应用程序是激活状态,并能够显示 在手机屏幕上,因此,应用程序需要一种机制,在没有用户界面的情况下,合其能够长时间在后 台运行,实现应用程序的特定功能,并能够处理事件或更新数据,Android系统提供了 Service)服务组件,它不直接与用户进行交互,却能够长期在后台运行。有很多情况需要使 Service,典型的例子就是:MP3播放器。

Service非常适用于无需用户干预,且需要长期运行的后台功能。Service没有用户界面, 有利于降低系统资源。而且ServiceActivity具有更高的优先级,因此在系统资源紧张的时候, Service不会轻易被Android系统终止。即使Service被系统终止了,在系统资源恢复后 Service也将自动恢复运行状态,因此可以认为Service是在系统中永久运行的组件。Service 了实现后台服务功能,还可以用于进程间通信,解决两个不同Activity应用程序进程之间的调用 和通信问题。

2.Service的生命周期:

三个生命周期函数:

onCreate()onStart()onDestory()

生命周期图如下:

3.startService方式启动Service

步骤:

1先创建一个类继承于Service然后重写onBind()[且这个方法必须实现] onCreate()onStart()onDestory()方法

2)在AndroidMainfest.xml中注册刚才写的这个Service

3)通过在Activty中启动Service

启动serviceXXXActivity.this.startService(IntentObj)

停止serviceXXXActivity.this.stopService(IntentObj)

startService的生命周期onCreate()-->onStart-->onDestory()。当第一次启动Service如果 Service未创建,将调用onCreate()周期函数,之后再startService如果Service已创建则只会调用 onStart()方法,stopService将调用onDestory()方法

注意:onStart方法是在Android2.0之前的平台使用的.2.0及其以后,则需重写 onStartCommand方法;


4.bindService方法启动Service

先看bindSerivce(Intentservice,ServiceConnection conn,int flags)函数

参数说明:

service:通过该参数也就是Intent我们可以启动指定的ServicestartService也必须指定这个参数, 否则找不到所要启动的service,这个匹配是在Activity的中定义Intent通过setAction以及在 AndroidManifest.xml中注册service时指定了要过滤的action来匹配的)

conn:该参数是一个ServiceConnection对象,这个对角用于监听访问者(也可以说成是客户 端) Service之间的连接情况,当访问者与Service连接成功时将回调ServiceConnection对象的 onServiceConnected(ComponentNamename,Ibinder service)方法;如果断开将回调 onServiceDisConnected(CompontNamename)方法

注意:onServiceDisConnected函数并不是我们调用类unBindService就能够调用的,android的帮 助文档上有这样的解释:Service在开始以后,除非调用了Context.stopService()或者stopSelf() 否则不会停止。当然如果内存不足,系统可能自动杀死Service。也就是说只会在Service被停止 或者被系统杀死以后调用。而执行unbindService只是告诉系统你已经和这个服务没有关系了。 系统在内存不足的时候可以优先杀死这个服务而已。


flags:指定绑定时是否自动创建Service


步骤:

1)新建一个类继承于Service类,重写onBind()onCreate()onUnBind()onDestory()方法。 再在这个类里声明一个Ibinder的子类对象用于提供给客户端,同时可以定义一些成员变量,客户 端可以获取到这个成员变量属性

2)在AndroidMainfest.xml文件中注册这个Service

3)在Activity里通过bindService绑定Service

绑定:XXXActivity.this.bindService(service,conn,flags)

解除绑定:XXXActivity.this.unbindService(conn)

bindService的生命周期:

bindService会经历onCreate-->onBind-->onUnbind-->onDestory

5.如何理解bindService这种通信方式?

可以这样理解:bindService这一方我们可以看作是客户端,然后客户端调用bindService() 方法去绑定一个ServiceService给我们返回一个Binder对象用于客户端与Serivce通信, 而这个Binder对象我们可以在客户端的ServiceConnection对象里的一个 onServiceConnected()方法取到这个Binder对象,这样我们就也能取到Service里的数据了

6.bindServicestartService的区别:

(1)生命周期:startService()方式启动 ,Service是通过接受Intent并且会经历onCreate() onStart()。当用户在发出意图使之销毁时会经历onDestroy() ,而bindService ()

式启动 ,与Activity 绑定的时候, 会经历onCreate() onBind() , 而当Activity被销毁的 时候,Service会先调用onUnbind ()然后是onDestroy ()

(2)控制方式:startService的控制方式需要使用固定的方法,对Service进行单一的操作。而后者

由于与Activity绑定,不用考虑其生命周期问题,并且从发送Intent的被动操作,变为可以 主动 Service对象进行操作,我们甚至可以建立一个Handler类,对Service进行相关的操作。大 大加强了Service的灵活性、可操作性

注:对于简单的应用startService()启动方式能带来更少的代码 , 简单的操作。对于复杂的应 bindService() 方式,虽然带来的更多的编码,但同时也带来了更好的可操作性,使其使用起 来更像Activity


相关文章推荐

Android开发之Service初步

一、什么是Service Service是Android系统提供的一个应用程序组件。Service与Activity组件类似,不过Service没有图形用户界面。Service通常用来处理一些耗时比较...

Android编程心得-Service数据绑定初步

在Android里,Service的数据绑定是一种重要的用法,我们知道Service与Activity一样是运行在当前应用进程的主线程里面的,他们之间交互的方式有多种,下面我来介绍一下如何使用数据绑定...

Android实训案例(七)——四大组件之一Service初步了解,实现通话录音功能,抽调接口

Service Service的神奇之处,在于他不需要界面,一切的操作都在后台操作,所以很多全局性(手机助手,语音助手)之类的应用很长需要这个,我们今天也来玩玩 我们新建一个工程——Se...

17、从头学Android之Service初步二

在上一篇,我们学习了通过startService来启动Service,由于篇幅过长,所以这一篇是接上一篇的 二、bindService方法启动Service 先看bindSerivce(Inten...

16、从头学Android之Service初步一

今天偶门外汉也来学习下Service,嘿嘿  Service概述 由于手机屏幕的限制,通常情况下在同一时刻仅有一个应用程序牌激活状态,并能够显示在手机屏幕上,因此,应用程序需要一种机制,在没有用户...

十二.Android中Service的初步介绍

一.Service介绍 1.  Service在android是系统中四大组件之一。Service的级别和Activity的级别一样。都是在同一个线程中执行。但Service没有界面,只能在后台运行...
  • psuaije
  • psuaije
  • 2012年02月11日 11:11
  • 2180

Android中的服务Service初步(1)

我们知道在Android开发中UI线程是主线程,在主线程不能进行耗时操作 所以当我们访问接口或者现在的时候都需要开启线程 在这样的环境下 handler AsyncTask就是用来解决这样的问题的...

Android系列之多线程用法与Service初步

在Android中,我们有时会需要进行一些后台任务,好让我们在继续进行交互操作的时候,一些特定任务能继续执行。这个时候Service的作用就凸显了出来。服务的好处就在于它不依赖于任何用户界面,当用户使...
  • welthy
  • welthy
  • 2016年06月04日 16:35
  • 188

Web Service学习与初步认识

概况:              Web Service 是一种跨变成语言和跨操作系统平台的运程调用规范,它不是框架,更不是一种技术,。        所谓跨编程语言和跨操作平台,就是说服务端程序采...
  • lxy344x
  • lxy344x
  • 2016年05月16日 11:26
  • 223

android service 学习(下)

  • 2013年08月04日 17:13
  • 111KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android学习--Service初步
举报原因:
原因补充:

(最多只允许输入30个字)