二、本地服务
Activity和service交互数据的时候使用(主要是service向activity中传递数据),activity和service运行在同一个进程中。
例如:实现服务执行加法操作
1.创建一个服务(ClscService),定义一个内部类(CalcBinder)继承Binder类,在该类中定义一个返回该服务对象实例的方法getService(),定义CalcBinder类型成员变量,在服务的onCreate方法中new出该对象,在onBind方法中返回该对象。
public class ClscService extends Service {
private CalcBinder binder ;
@Override
public void onCreate() {
super.onCreate();
binder = new CalcBinder() ;
}
//在该方法返回内部类binder对象
@Override
public IBinder onBind(Intent arg0) {
return binder;
}
//服务中实现的方法,两数相加
public float add(float a ,float b) {
return a + b ;
}
/*1.在与activity的交互中使用
*2.服务的实例不是new出来的
*3.内部类继承Binder类,写一个方法返回该服务的实例
*/
class CalcBinder extends Binder{
public Service getService(){
return ClscService.this ;
}
}
}
2.在要使用该服务的activity中绑定该服务。在ServiceConnection 对象的onServiceConnected方法中得到binder对象,进而通过binder.getService()得到服务的实例,执行服务中的加法计算方法
Intent clscService = new Intent(this ,ClscService.class);
this.bindService(clscService, calcConn, BIND_AUTO_CREATE);
private ServiceConnection calcConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
CalcBinder binder = (CalcBinder) service ;
ClscService cs = (ClscService) binder.getService() ;
float f = cs.add(5,4);
Toast.makeText(ClscActivity.this, f+"", Toast.LENGTH_SHORT).show() ;
unbindService(calcConn);
}
} ;