android java开发 第三天 之 Activity 与 Service 绑定(activiey 调用service中方法)
一个常见的应用场景:
loginactivity登陆页面 点击login, 发送给后台的服务类CmdSocketService 去处理登陆业务,
并获取登陆状态(成功失败的反馈)
loginActivity使用封装好的CmdSocketService(service)类的方法:
a) loginActivity类中定义:
CmdSocketService serviceBinder;
// 下面定义用来连接到服务CmdSocketService后的处理函数
private ServiceConnection mConn = newServiceConnection()
{
public void onServiceConnected(ComponentName className, IBinder service)
{
// 这里service其实是MyBinder类对象,,其中有个getService()方法,用于返回service对象自己。
// LoginActivity获得了service对象(serviceBinder)的引用,那使用service中方法和普通的类方法一样使用。
serviceBinder=((CmdSocketService.MyBinder)service).getService();
Log.v(TAG,"get CmdSocketService 引用 ok !");
mBound = true;//自己定义的服务是否绑定标记
}
public void onServiceDisconnected(ComponentName className) {
serviceBinder = null;
mBound = false;
}
};
b) onStart()中定义:
Intent intent = new Intent(this,CmdSocketService.class)
bindService(intent, mConn, Context.BIND_AUTO_CREATE);
//===========================================================
service类中的定义:
public class CmdSocketService extends Service{
//1 .
public class MyBinder extends Binder
{
public CmdSocketService getService()
{
Log.v(TAG,"getService()");
return CmdSocketService.this; //返回service对象本身
}
}
// 2.
private MyBinder mBinder = new MyBinder();
//3.反馈给onServiceConnection()
onBind()中实现:
{
return mBinder;
}
activity和services绑定流程:(bindService方式)
1. new intent指定和哪个service绑定
2. 开始绑定,传递服务连接处理函数ServiceConnection()(有点像回调函数),//调用此函数时android会调用service类中的onBind()函数。
3.onBind()函数里面返回了一个Binder子类对象。Binder子类中有个getServices()方法,返回service对象本身。,最终就是为了给loginActiviy返回service对象的引用。
4.logingActivity和service绑定成功后。android会调用onServiceConnected()函数。此函数中IBinder就是service返回的Binder的子类对象MyBinder.
5.调用MyBinder中的方法getService()即可获得service对象的引用。
6.开始调用service中的公共方法吧。
补充:移动开发 , Android ,