服务
StartService 和 BindService的区别:
StartService是和调用者(Activity)没有联系,即调用者退出,服务依然可以在后台运行。
生命周期:onCreate()- >onStartCommand()->startService()->onDestroy()
BindService是和调用者(Activity)有联系,一旦调用者退出,服务也会被停止。
生命周期:onCreate()->onBind()->onUnbind()->onDestroy()
BindService的使用
绑定一个服务:
Intent intent = new Intent(this, BluetoothScanService.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
参数
conn 实现ServiceConnection类
Context.BIND_AUTO_CREATE 是否自动启动服务,默认的是这个
private ServiceConnection conn = new ServiceConnection() {
//当调用这个方法时说明服务已经绑定连接了 @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { BluetoothScanService.BindService bindService = (BluetoothScanService.BindService) iBinder; BluetoothScanService service = bindService.getService();
service.abc();//可以在这里调用服务里的方法了 }
//当系统与service的连接意外丢失时调用此方法(如service崩溃了或被强杀了) @Override public void onServiceDisconnected(ComponentName componentName) { } };
服务解绑:
unbindService(conn); //虽然说当调用者退出后,服务也会关闭,但我们还需要手动去解绑,否则就会报异常
都是需要去实现ServiceConnection类的
附,服务类的代码:
public class BluetoothScanService extends Service { @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { scan(); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); } @Nullable @Override public IBinder onBind(Intent intent) { // scan(); return bindService; }
//创建BindService类,通过BindService类来操作服务里的方法 private BindService bindService = new BindService(); public class BindService extends Binder { public BluetoothScanService getService() { return BluetoothScanService.this; } }1)
//注:如果使用的是startService,那么就需要在onStartCommand()方法里执行 //如果使用的是bindService,那么就需要在onBind()方法里执行 private void scan() {
//在服务里要做的事
}
}