
无aidl怎么实现binder?需求 当触发特殊情况时,使客户端调用服务端 (当某种情况发生时)这个在HomeActivity中模拟 客户端 MyClient.java 手写 bindService() 服务端 MyServer.java 重写 onTransact() 真服务 ClientService 重写 onBind () HomeActivity MyClient myClient new MyClient(); myClient.bindService(this); //延时1秒等待上面异步成功 myClient.callMyServer1();MyClientpublic class MyClient { IBinder mIbinder null; public void bindService(Context context) { Intent intent new Intent(context, ClientService.class); context.bindService(intent, new ServiceConnection() { Override public void onServiceConnected(ComponentName name, IBinder service) { mIbinder service; Log.e(getClass().getName(), zzc addresses service); } Override public void onServiceDisconnected(ComponentName name) { } }, Context.BIND_AUTO_CREATE); } public void callMyServer1() { Parcel data Parcel.obtain(); data.writeInt(1); data.writeInt(2); Parcel replay Parcel.obtain(); try { mIbinder.transact(1001, data, replay, 0); Log.e(getClass().getName(), zzc replay replay.readInt()); } catch (RemoteException e) { throw new RuntimeException(e); } } }MyServerpublic class MyServer extends Binder { Override protected boolean onTransact(int code, NonNull Parcel data, Nullable Parcel reply, int flags) throws RemoteException { if (code 1001) { int a data.readInt(); int b data.readInt(); int sum a b; reply.writeInt(sum); return true; } return super.onTransact(code, data, reply, flags); } }ClientServicepublic class ClientService extends Service { public ClientService() { } Override public IBinder onBind(Intent intent) { return new MyServer(); } }ZHomeActivitypublic class ZHomeActivity extends AppCompatActivity { Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyClient myClient new MyClient(); myClient.bindService(this); Handler handler new Handler(Looper.getMainLooper()); handler.postDelayed(() - { myClient.callMyServer1(); }, 1000); } }总结普通的app服务,不会像AMS这种系统服务注册到ServerManager系统级别的app,引出问题这是基础的模板,但是你可以看到,那个所谓的服务端的add方法,有实无形.导致客户端要调用服务端的add方法,实体得写在客户端//MyClient.java ... public void callMyServer1() { Parcel data Parcel.obtain(); data.writeInt(1); data.writeInt(2); Parcel replay Parcel.obtain(); try { mIbinder.transact(1001, data, replay, 0); Log.e(getClass().getName(), zzc replay replay.readInt()); } catch (RemoteException e) { throw new RuntimeException(e); } }aidl的设计思想是什么呢?