Service
对服务Service的初步认识:
1:服务Service其实就是运行在子线程中的一段程序,没有界面,不需要和用户交互;比如视频,音乐的下载,闹钟的定时等都是通过服务来实现的;
2:服务中用来执行不需要和用户交互,但是又需要它保持一直运行的任务;我们一般将服务和活动中的控件相互绑定,以此来启动或者终止服务;
自定义Service
public class MyService extends Service{
public MyBinder myBinder = new MyBinder();
public IBinder onBind(Intent intent){
//将MyBinder的引用返回;
return myBinder;
}
public void onCreate(Bundle savedInstanceSatate){
super.onCreat();
//该方法在服务被创建的时候会调用;
}
public int onStartCommand(Intent intent,int flags,int StartId){
super.onStartCommand( intent, flags, StartId);
//该方法在服务被启动的时候会调用;每启动一次就会调用一次;
}
public void onDestory(){
super.onDestory();
//在服务被销毁的时候会被调用,一般用于释放一些资源;
}
/**
* 自定义一个Binder,在这个类里面我们可以写一系列的公共方法,这个类的引用会在MyService和Activity绑定的时候返回给Activity;
* 在activity中我们可以通过这个引用调用MyBinder的任何public的方法;
*/
class MyBinder extends Binder{
//这些public方法都是自定义的;
public void functionOne(){
Log.i("tag","functionOne has run!")
};
public void functionTwo(){
Log.i("tag","functionTwo has run!")
};
}
}
说明:
1:Service是个抽象类,自定义service的时候需要声明一个类继承Service;
2:onBind(Intent intent): 是Service中的唯一一个抽象类;必须实现;
该方法是在Service和Activity绑定的时候会主动调用的一个方法;
绑定成功后会返回一个IBinder类型的引用;通过这个引用我们可以调用MyBinder类里面的公共方法以实现activity对Service执行内容的控制;
3:onCreate():在服务创建的实时会调用;
4:onStartCommand(Intent intent,int flags,int StartId):在服务每次启动的时候都会调用;
5:onDestory():当服务被销毁的时候会调用;一般在这个方法中释放资源;
在Activity中操作Service:
启动服务:
Intent intent = new Intent(MyActivity.this,MyService.class);
startService(intent);
终止服务:
Intent intent = new Intent(MyActivity.this,MyService.class);
stopService(intent);
绑定服务:
Intent intent = new Intent(MyActivity.this,MyService.class);
bindService(intent,connection,BIND_AUTO_CREATE);
在绑定服务这里需要三个参数:
第一个是intent;
第二个是ServiceConnection类型的对象;
第三个是绑定模式:BIND_AUTO_CREATE意思是和activity绑定后自动创建服务;
ServiceConnection:这个类用来处理activity绑定Service和activity解绑Service的;下面用匿名类部类的方式实现:
Public ServiceConnection connection = new ServiceConnection(){
public void onServiceDisconnected(Component name){}
public void onServiceConnected(Component name,IBinder binder){
MyService.MyBinder myServiceBinder = (MyService.MyBinder)binder;
//在这里可以通过Service回调onBind()方法返回的IBinder引用调用MyBinder的公共方法;实现Activity对Service具体执行的任务的控制;
myServiceBinder.functionOne();
myServiceBinder.functionTwo();
}
}
解绑服务:
unBindService(connection);
Service的生命周期:
startService():启动服务;在启动之后服务会一直保持运行状态;——onCreat()方法会执行,接着onStartCommand()会执行;
stopService():停止服务
stopSelf():停止服务;这两种方法都可以停止服务;——-停止服务之后onDestory()方法会执行;
BindService():绑定服务;绑定服务的时候如果服务是首次启动,则会先调用onCreat()方法创建服务;
unBindService():解绑服务;解绑之后onDestory()会被调用;
注意:startService()方法启动的服务必须由stopService()方法停止;
BindService()方法启动的服务必须由unBindService()方法停止;