Service(一)

来源:互联网 发布:linux打包命令 tar.gz 编辑:程序博客网 时间:2024/04/29 02:53

服务(Service)是Android四大组件之一


1.启动式服务

1.1.启动式开启服务

Intent startIntent=new Intent(this, MyService.class);  

startService(startIntent);


1.2.启动式停止服务

Intent stopIntent=new Intent(this, MyService.class);  

stopService(stopIntent);


1.3.启动式服务生命周期

onCreate()->onStartCommand()(服务第一次执行)

onStartCommand()(服务不是第一次执行)

onBind()方法不执行


1.4总结

使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了服务仍然运行(只要不执行stopService(stopIntent)方法)。



2.绑定式服务

2.1.绑带式开启服务

Intent bindIntent=new Intent(this, MyService.class);

bindService(bindIntent, conn, BIND_AUTO_CREATE);


2.2.绑定式停止服务

unbindService(conn);

只有调用过bindService()才可以调用unBindService() 这两个方法必须一一对应,可以只调用前者,但是绝对不能再未调用前者的情况下,调用后者,或者多次调用后者.


2.3.在activity页面里

private MyService.MyBinder myBinder;(服务里的内部类)


private class MyServiceConnection implements ServiceConnection{

@Override

public void onServiceConnected(ComponentName arg0, IBinder arg1) {

myBinder=(Mybinders) arg1;//获取服务里内部类对象

myBinder.start();//调用服务里相应的函数

}

 

@Override

public void onServiceDisconnected(ComponentName arg0) {


}

}


2.5.服务里 onBind方法

public IBinder onBind(Intent arg0) {

     return new Mybinders();

}


2.6.服务里 继承Binder的内部类

class Mybinders extends Binder{

public void start(){

在此进行相应的操作

}

}


2.7.绑定式生命周期

onCreate()->onBind()(服务第一次执行)

onBind()(服务不是第一次执行)

onStartCommand()方法不执行

 

2.8总结

使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的 特点。


3.总结

这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服 务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的 特点。

Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。

0 0