Android IDL 小例子
16lz
2021-01-23
关于Android IDL的知识 可阅读《Google Android 揭秘》的P104页,也可参见ApiDemos中的代码 其他的不说,直接上代码。 1.先写一个.aidl远程接口
package com.originatechina; //定义包interface ISimpleMathService { //声明接口名称int add(int a, int b); //描述方法}
在eclipse 它会自动在gen文件夹对应的包下生成ISimpleMathService.java文件。 2.公开远程接口 package com.originatechina;//导入相应的包public class SimpleMathService extends Service {// 实现远程接口private final ISimpleMathService.Stub binder = new ISimpleMathService.Stub() {@Overridepublic int add(int a, int b) throws RemoteException {return a + b;}};@Overridepublic IBinder onBind(Intent intent) {return this.binder; // 返回一个表示远程接口的对象 IBinder}}
3.绑定到服务 package com.originatechina;//导入相应的包public class MainActivity extends Activity { private ISimpleMathService service; // 定义远程接口类型变量private boolean bound; // 定义表示绑定状态的布尔变量private Button addButton; //请先在布局文件中添加一个按钮组件private ServiceConnection connection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder iservice) {service = ISimpleMathService.Stub.asInterface(iservice);bound = true;}@Overridepublic void onServiceDisconnected(ComponentName name) {service = null;bound = false;}}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); addButton = (Button) findViewById(R.id.add_btn); // 省略获取View部分 addButton.setOnClickListener(listener); } private OnClickListener listener = new OnClickListener(){@Overridepublic void onClick(View v) {int a = 10;int b = 20;//省略从布局中获取字符串 并转换为int类型//doBindService(); //不能置于此处,否则onServiceConnected()还来不及调用,//service为null,以下语句抛空指针异常//可放在onCreate() 或者 onStart() 里面try {int result = service.add(a, b); // 使用远程对象执行操作Toast.makeText(MainActivity.this, "" + a + "+" + b + "=" + result, 2000).show();} catch (RemoteException e) {e.printStackTrace();}} }; @Override public void onStart() { super.onStart(); doBindService(); } @Override public void onStop() { super.onStop(); doUnbindService(); } void doBindService() { if(!bound) { bindService(new Intent(this, SimpleMathService.class), connection, Context.BIND_AUTO_CREATE); //建立绑定 } } void doUnbindService() { if(bound) { // 解除绑定 unbindService(connection); } }}
4. 在AndroidManifest.xml中定义你的service <service android:name=".SimpleMathService" />
然后运行即可。
更多相关文章
- ActionBar的自定义样式
- Android自定义对话框(Dialog)
- 自定义android preference组件
- android定义全局变量
- android 自定义TextView实现秒级数字时钟
- Android之自定义适配器
- Android中自定义Dialog常用的两种方式
- Android 自定义充电动画
- android AlertDialog自定义全屏显示