Service 介绍
Service和Activity是不同的,Acticity,显示图形用户界面,而Service是不可见的--如执行intent的查找,出来数据,更新ContentProvider,激活Intent和触发Notification。Activity在它的生命周期内定地启动,停止和重新创建,而service则设计为长的生命周期,它是用来执行一些持续的,可能耗时的操作。
Service的启动和停止,控制是通过其他应用程序来实现的,包括Activity,Broadcase Receive,其他Service。
运行中的Sercice具有比处于非激活的Service或者与不可见的(停止)的Activity要高的优先级,所以他被运行的是资源管理终止的机会要小点。
1.启动Service
要定义一个Service,需要创建一个扩展Service的新类。需要重写onCreate和onBind方法
public void MyService extends service{
@Override
public void onCreate(){
super.onCreate;
}
@Override
// 绑定service要实现onBind方法,对正在运行的Sverice进行发放调用
public IBinder onBind(Intent intent) {
return binder;
}
}
当创建service之后需要在清单文件中注册
2.执行一个Service并控制它的重新启动
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startBackgroundTask(intent,staartId);
return super.onStartCommand(intent, flags, startId);
}
3.启动和停止Service
//用intent启动一个service
Intent intent=new Intent();
intent.setClass(MainActivity.this, MyServece.class);
this.startService(intent);
//停止Service
stopService(new Intent(this,MyService.class));
4.将Service绑定要Activity
允许Service和Activity绑定,这样能够获得更加详细的接口。要让一个Service支持绑定,需要实现onBind方法,并返回被绑定的当前实列
@Override
// 绑定service要实现onBind方法,对正在运行的Sverice进行发放调用
public IBinder onBind(Intent intent) {
return binder;
}
class ControlBinder extends Binder {
// 停止
public void pause() {
player.pause();
}
}
Service和其他组件的连接表示为一个ServiceConnetion。
要想将一个Service与其他组件绑定,需要实现一个新的ServiceConnection,建立了一个连接后,就可以重写onServiceConnection和onServiceDisconnected方法获得对Service的实列的引用。
// 创建链接对象获得service的实例应用
public ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
binder = (ControlBinder) service;
th.start();
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};