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