注意:
- 运行在主线程,不能用于做耗时请求和操作,
- 可以开启一个线程,在线程中做耗时操作。
启动本地服务:start和Bind方式。
生命周期:左边为start方式,右边为Bind方式
Service生命周期
特点:
- start方式:服务跟启动源没有任何联系,无法得到服务对象,注意启动后只会调用一次onStartCommand()方法
- Bind方式:通过Ibinder接口实例,返回一个ServiceConnection对象给启动源,通过ServiceConnection对象的相关方法可以得到Service对象
- start方式
①新建类MyStartService继承自Service,实现onCreate(),onStartCommand(),onDestroy()方法
②用Intent启动和停止服务
启动服务
Intent intent1=new Intent(MainActivity.this,MyStartService.class);
startService(intent1);
停止服务
stopService(intent1);
③ 在AndroidManifest注册其权限,加在application标签中
<service android:name=".MyStartService"></service>
- Bind方式
eg:实现暂停,播放功能
①用IBinder对象
在继承自Service的MyBinderService类
public class MyBinder extends Binder{
public MyBinderService getService(){
return MyBindService.this;
}
}
②新建MyBinderService类继承Service,实现onCreate(),onBind(),onUnbind(),onDestory()方法
写pause(),play()方法
public IBinder onBind(){
return new MyBinder();
}
③ 在主方法ServiceConnection()方法中得到MyBinderService实例
ServiceConnection conn=new ServiceConnection(){
//当启动源和Service成功连接时调用
public void onServiceConnected(ComponentName componentName,IBinder binder ){
MyBinderService service=((MyBinderService.MyBinder).IBinder).getService();
}
//当启动源和Service意外丢失时调用
public void onServiceDisconnected(ComponentName componentName) {}
}
④ 绑定和解绑定服务
绑定
Intent intent2=new Intent(MainActivity.this,MyBinderService.class);
bindService(intent2,conn,BIND_AUTO_CRERTA);
解绑
unbindService(conn);
⑤ 开启服务
service.pause();
service.play();
⑥注册权限,在application中注册
<service android:name=".MyBinderService"></service>