service 服务
android四大组件之一 。它一直运行在后台,没有界面。
创建service的要素:
1、继承service
2、在清单文件里面配置:
包名+类名
启动服务的方法:
startService(intent)方法;
service生命周期: onCreate() onstartCommand();
注意:第一次开启服务的时候会调用onCreate(),onstartCommand()
服务没有结束之前在此开启不会创建新的服务,只会调用
onstartCommand();
关闭服务的方法:
stopService(intent)
service生命周期:onDestroy();
注意:startService()开启的服务跟activity之间关系比较松散,
activity关闭之后service依然存在。
绑定service:
bindService(service , conn, Context.BIND_AUTO_CREATE);
生命周期:onCreate() onBind()(返回一个IBinder类型的对象,没有就返回null)
参数: 第一个:intent对象
第二个:ServiceConnection对象(声明成成员变量)
第三个:Context.BIND_AUTO_CREATE
(当我们绑定服务的时候,如果服务不存在,会自动开启)
服务连接对像
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
//服务异常终止的时候会被调用
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//onBind()返回一个非空的IBinder类型的对象的时候就会被调用
binder = (MyBinder) service
}只有这一个作用,用来和service相连
解除绑定:
unbindService(conn);
生命周期: onUnBind() onDestroy();
参数:是调用bindService() 的第二个参数对象。
注意:通过bindService()开启的服务跟activity关系比较紧密,
会随着activity生命周期结束而结束。
注意:service的生命周期不是完全跟activity的生命周期绑在一起的。
如果先通过startService()开启服务之后,再去绑定服务,
我们关闭activity之后,服务不会被关闭,只会解除绑定。
Activity通过绑定service的方式去获取service里面的方法:
步骤:
1、在Activity里面获取IBinder类型的对象
a、在service里面声明一个类MyBinder,
继承Binder(实现IBinder)
b、在类MyBinder创建一个方法去调用service里面的方法
C、创建MyBinder类型的对象。
d、在onBind()里面返回MyBinder类型的对象(自动转型IBinder)
e、在activity的onServiceConnection();获取IBinder类型对象。
然后把他转换成MyBinder类型的对象,就可以使用里面的方法