总的来说,分为两个库:interface-loader和service-fetcher,可单独使用interface-loader,也可一起使用
Via Gradle:
implementation 'com.jeremyliao:interface-loader:0.0.1'
Via Gradle:
implementation 'com.jeremyliao:service-fetcher-rxjava2:0.0.1'
public interface IXXX {
...
}
InterfaceService.newService()
InterfaceLoader.getService()
我们以一个加减乘法的接口调用来说明这个示例
public interface ILoaderDemo {
int plus(int a, int b);
int minus(int a, int b);
int multi(int a, int b);
}
定义一个service:
public class LoaderDemoService extends Service {
public static final String ACTION = "intent.action.loader";
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return InterfaceService.newService(ILoaderDemo.class, new ILoaderDemo() {
@Override
public int plus(int a, int b) {
return a + b;
}
@Override
public int minus(int a, int b) {
return a - b;
}
@Override
public int multi(int a, int b) {
return a * b;
}
});
}
}
Intent intent = new Intent(LoaderDemoService.ACTION);
intent.setPackage(getPackageName());
serviceFetcher = new ServiceFetcher(this, intent);
serviceFetcher.bindService();
disposable.add(serviceFetcher.getService()
.map(new Function<IBinder, Integer>() {
@Override
public Integer apply(IBinder binder) throws Exception {
return InterfaceLoader.getService(ILoaderDemo.class, binder)
.plus(10, 20);
}
})
.map(new Function<Integer, String>() {
@Override
public String apply(Integer result) throws Exception {
return "result: " + result;
}
})
.subscribe(new Consumer<String>() {
@Override
public void accept(String result) throws Exception {
binding.tvContent.setText(result);
}
}));
serviceFetcher.unbindService();
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
ServiceFetcher serviceFetcher;
final CompositeDisposable disposable = new CompositeDisposable();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setHandler(this);
binding.setLifecycleOwner(this);
Intent intent = new Intent(LoaderDemoService.ACTION);
intent.setPackage(getPackageName());
serviceFetcher = new ServiceFetcher(this, intent);
serviceFetcher.bindService();
}
@Override
protected void onDestroy() {
super.onDestroy();
serviceFetcher.unbindService();
if (!disposable.isDisposed()) {
disposable.dispose();
}
}
public void remotePlus() {
disposable.add(serviceFetcher.getService()
.map(new Function<IBinder, Integer>() {
@Override
public Integer apply(IBinder binder) throws Exception {
return InterfaceLoader.getService(ILoaderDemo.class, binder)
.plus(10, 20);
}
})
.map(new Function<Integer, String>() {
@Override
public String apply(Integer result) throws Exception {
return "result: " + result;
}
})
.subscribe(new Consumer<String>() {
@Override
public void accept(String result) throws Exception {
binding.tvContent.setText(result);
}
}));
}
public void remoteMinus() {
disposable.add(serviceFetcher.getService()
.map(new Function<IBinder, Integer>() {
@Override
public Integer apply(IBinder binder) throws Exception {
return InterfaceLoader.getService(ILoaderDemo.class, binder)
.minus(10, 20);
}
})
.map(new Function<Integer, String>() {
@Override
public String apply(Integer result) throws Exception {
return "result: " + result;
}
})
.subscribe(new Consumer<String>() {
@Override
public void accept(String result) throws Exception {
binding.tvContent.setText(result);
}
}));
}
public void remoteMulti() {
disposable.add(serviceFetcher.getService()
.map(new Function<IBinder, Integer>() {
@Override
public Integer apply(IBinder binder) throws Exception {
return InterfaceLoader.getService(ILoaderDemo.class, binder)
.multi(10, 20);
}
})
.map(new Function<Integer, String>() {
@Override
public String apply(Integer result) throws Exception {
return "result: " + result;
}
})
.subscribe(new Consumer<String>() {
@Override
public void accept(String result) throws Exception {
binding.tvContent.setText(result);
}
}));
}
}