MainActivity
Intent intent = new Intent(this, LocalService.class);
startService(intent);
intent = new Intent(this, RemoteService.class);
startService(intent);
AIDL文件
interface GuardAidl{
void doSomething();
}
LocalService
public class LocalService extends Service {
private LocalBindler mLocalBinder;
@Override
public void onCreate() {
super.onCreate();
Log.i("TAG_Test", "LocalService启动");
//RemoteService设置为前台服务,提高优先级
bindService(new Intent(this,RemoteService.class),mServiceConnection,Context.BIND_ABOVE_CLIENT);
}
@Override
public IBinder onBind(Intent intent) {
if(mLocalBinder == null)
mLocalBinder = new LocalBindler();
return mLocalBinder;
}
private class LocalBindler extends GuardAidl.Stub{
@Override
public void doSomething() throws RemoteException {
Log.i("TAG_Test", "绑定RemoteService成功!");
}
}
ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("TAG_Test", "RemoteService链接成功!");
try {
if(mLocalBinder != null)
mLocalBinder.doSomething();
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i("TAG_Test", "RemoteService被杀死了");
Intent intent = new Intent(LocalService.this,RemoteService.class);
startService(intent);
bindService(intent,mServiceConnection,Context.BIND_ABOVE_CLIENT);
}
};
}
RemoteService
public class RemoteService extends Service {
private RemoteBindler mRemoteBinder;
@Override
public void onCreate() {
super.onCreate();
Log.i("TAG_Test", "RemoteService启动");
bindService(new Intent(this,LocalService.class), mServiceConnection, Context.BIND_ABOVE_CLIENT);
}
@Override
public IBinder onBind(Intent intent) {
if (mRemoteBinder == null)
mRemoteBinder = new RemoteBindler();
return mRemoteBinder;
}
private class RemoteBindler extends GuardAidl.Stub {
@Override
public void doSomething() throws RemoteException {
Log.i("TAG_Test", "绑定LocalService成功!");
}
}
ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("TAG_Test", "LocalService链接成功!");
try {
if (mRemoteBinder != null)
mRemoteBinder.doSomething();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i("TAG_Test", "LocalService被杀死了");
Intent intent = new Intent(RemoteService.this, LocalService.class);
startService(intent);
bindService(intent, mServiceConnection, Context.BIND_ABOVE_CLIENT);
}
};
}
AndroidMenifest.xml
<service android:name=".service.LocalService"/>
<service android:name=".service.RemoteService" android:process=":remote"/>