Service两种启动模式
2017-09-20 本文已影响0人
Mayo酱
第一种启动方法
public class StartService extends Service {
//绑定服务才会调用,必须实现的方法(唯一抽象方法)
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
//首次创建服务时,系统将调用此方法来执行一次性设置程序(在调用onStartCommond或onBind之前)
@Override
public void onCreate() {
super.onCreate();
}
//调用startService方法启动Service时会回调
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
//服务销毁时回调,实现资源的清理(线程、资源的监听器,contentprovider等)
@Override
public void onDestroy() {
super.onDestroy();
}
}
第二种启动方法
Service
public class BindService extends Service {
private int count;
private boolean quit;
private Thread thread;
private LocalBinder binder = new LocalBinder();
//创建Binder对象返回给客户端,提供数据接口
public class LocalBinder extends Binder{
//声明一个方法
BindService getService(){
//返回当前对象,这样就可以在客户端调用Service公共方法了
return BindService.this;
}
}
//把Binder类返回给客户端
@Nullable
@Override
public IBinder onBind(Intent intent) {
return binder;
}
@Override
public void onCreate() {
super.onCreate();
//开启一个线程,count++
}
//公共方法
public int getCount(){
return count;
}
//解除时调用
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
@Override
public void onDestroy() {
this.quit = true;
super.onDestroy();
}
}
Activity
public class BindActivity extends Activity {
Button btnBind,btnUnBind,btnGetData;
//代表与服务器的里链接,两个方法:onServiceConnected(操作者在链接一个服务成功时被回调)和
// onServiceDisConnected(服务崩溃或者被杀死导致链接中断时被调用)
private MyConn con;
private BindService mService;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//创建绑定对象
final Intent intent = new Intent(this,BindService.class);
con = new MyConn();
//开始绑定(回调onBind方法,如果没有创建先执行onCreate)
//BIND_AUTO_CREATE:活动和服务绑定后自动创建服务,onCreate执行,onStartCommand不执行
bindService(intent,con,BIND_AUTO_CREATE);
//获取数据
if(mService != null){
//通过绑定服务传递的Binder对象获取Service暴露出来的数据
mService.getCount();
}else {
//还没绑定
}
//解除绑定
if(mService != null){
mService = null;
unbindService(con);
}
}
private class MyConn implements ServiceConnection{
//与服务器交互的接口方法,绑定服务时被回调,在这个方法获取绑定Service传递过来的IBinder对象
//通过IBinder对象实现宿主与Service的交互
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//绑定成功
BindService.LocalBinder binder = (BindService.LocalBinder) service;
mService = binder.getService();
}
//当取消绑定时被回调,正常情况下不会被调用,当Service被意外销毁时(如内存不足)才会被调用
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
}
}
}