安卓开发,Service 服务

Service 服务

是一种应用组件,可长时间后台运行,不提供用户界面。如音乐播放器/下载程序。不能自己运行。

使用Service的方式:

(一)startService():

调用者和服务之间没有联系,即使调用者退出了,服务仍然进行;调用者(Activity)无法访问服务中的方法,因为不能自己new出来服务,new出来的就不是服务了,只是普通对象。

onCreate()->onStartCommand()->服务启动->onDestroy()。注意onCreate()只执行一次,Service实例只有一个。
http://www.sina.com.cn/mid/search.shtml?q=%E5%8D%8E%E7%BA%B3%E5%AE%A2%E6%9C%8D_18183615678__MR
1) 编写Service的子类或者间接子类;

2) 重写方法:onStartCommand()、onBind()、onCreate()、onDestroy();

onBind()方法返回null即可,所需操作写在onStartCommand()方法中。

3) 使用Intent启动Service,与启动其他Activity一样,方法换成startService(),类由OtherActivity换为Service子类。Intent同时可以向Service传递数据。

4) 在manifest文件中声明服务:,与Activity同一级别。

5) 终止Service用方法stopService()。在setting-》application-》runningService中可以查看到服务正在运行。

6) int onStartCommand(Intent intent,int flag,int startId):startId为该服务唯一标识,类似身份证号。

(二)bindService():

调用者和服务绑定在一起,调用者一旦退出,服务也就终止;调用者可以访问服务中的方法(不能直接创建对象访问,要用下面代码介绍的办法)。

onCreate()->onBind()->onUnbind()->onDestroy()

BoundService允许其他组件(如Activity)绑定到这个Service上,可以发送请求,也可以接受请求,甚至进行进程间的通话。BoundService仅仅在服务于其他组件时存在,不能独自无限期的在后台运行。

如何创建BindService:

当创建一个能提供绑定功能的服务时,我们必须提供一个IBinder对象,客户端能使用该对象与服务进行交互。IBinder对象创建的三种方式:(参见dev->Service->BoundServices)

1) 继承Binder类,步骤如下:

a. 在Service类中,定义Binder子类MyBinder,在其中定义用于返回BoundService对象的getService()方法。

b. 在Service类中,定义MyBinder对象,并在onBind()方法中返回该对象。

c. 在Service类中,可以定义其他公有方法,以便将来被Service对象调用。

a. 在Activity类中,定义ServiceConnection接口的对象,重写onServiceConnected()方法和onServiceDisconnected()方法。

b. 在Activity类中,启动服务时执行bindService(intent,ServiceConnection,flag)方法,在服务连接成功时自动调用onServiceConnected(ComponentName,IBinder)方法,此方法的参数IBinder就是Service类中onBind()方法的返回值。因此可在此方法中得到Service对象,并可以调用Service类中定义的方法。onServiceDisconnected()方法很少调用,一般是当服务突然异常终止的时候调用。

参数flag取Context类中的常量:
http://www.sina.com.cn/mid/search.shtml?q=%E5%8D%8E%E7%BA%B3%E5%AE%A2%E6%9C%8D_18183615678__AB

Context.BIND_AUTO_CREATE:绑定时自动创建Service;最常用。

BIND_DEBUG_UNBIND:包含错误解绑时调试帮助。等等,查阅帮助文档。

(三)混合开启服务 解决调用者一旦退出退出,服务仍然开启
start方式启动服务

Bind开启服务

混合服务 音乐播放
MainActivity
XML
manifest.xml

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值