一、同一个apk内部,activity和service的通信
项目要求,进入activity启动service,并要求servcice能够传递数据给activity,activity能够交互service,下面列出大致思路:
1、activity在service启动之前,先构建个service对象,并向其传递一个handler
2、activity开启服务,activity绑定服务,并把绑定之后返回的service值存储到上一步中的service对象去
3、service通过handler向activity传递数据
这里面比较麻烦的就是在绑定service之前,activity就需要先构建一个service对象,并传递数据给他,在service起来之后主动和activity通信,之后在绑定服务的时候对这个service对象重新赋值,否者会在某些activity调用service方法的时候出现空指针
service里面:
private final IBinder mBinder = new LocalBinder();
public class LocalBinder extends Binder {
RecordServer getService() {
// Return this instance of LocalService so clients can call public methods
return RecordServer.this;
}
}
activity里面
private static RecordServer mRecordServer;
private static boolean mBound = false;
public void onResume()
{
Intent intent = new Intent(this, RecordServer.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
startService(intent);
super.onResume();
}
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className,
IBinder service) {
// 已经绑定了LocalService,强转IBinder对象,调用方法得到LocalService对象
LocalBinder binder = (LocalBinder) service;
mRecordServer = binder.getService();
mBound = true;
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
mRecordServer.SetHandler(null);
mBound = false;
}
};
二、不在同一个apk里面的相互通信