一、生命周期:
startService启动方式:onCreate()—>onStartCommand() —>onDestroy();
bindService启动方式:onCreate()—>onBind() —>onUnbind()—>onDestroy();
我们通过官方给出的一张图片来体会一下:
二、启动方式(基本使用方法):
startService:
Intent mIntent=new Intent(MainActivity.this,startServiceDemo.class) ; startService(mIntent);//直接启动服务方式启动 stopService(mIntent);//停止服务
bindService:
ServiceConnection serviceConnection=new myServiceConnect(); Intent mBindIntent=new Intent(MainActivity.this,bindServiceDemo.class); bindService(mBindIntent,serviceConnection,BIND_AUTO_CREATE); unbindService(serviceConnection);
实现ServiceConnection接口
public class myServiceConnect implements ServiceConnection { //绑定成功之后回调,Service中传递的数据,在此中接收 @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { } // @Override public void onServiceDisconnected(ComponentName componentName) { } }
三、启动方式区别:
1、生命周期的不同:startService生命周期为onCreate
2、重复调用是调用方法不同:
startService启动方式:重复调用时,onCreate()方法只会创建调用一次,startCommand()会每次都会被调用
bindService启动方式:重复调用时,onCreate()与onBind()都只会调用一次
3、与activity之间关系不同
startService启动方式:与activity之间没有什么关系,对应的activity被销毁时,不影响service
bindService启动方式:与activity绑定,当对应的activity销毁时,对应的服务也销毁
4、应用场景不同:
startService启动方式:与activity没有什么关系,所以常用于,只指定Service的操作,不需要service返回操作结果,不需要与Service建立联系的场景
bindService启动方式:activity需要Service操作完成后,返回一系列的返回结果的场景(这种场景也可以通过广播实现,但是操作频繁时会造成性能上的消耗)