Android学习--Service初步

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值