AIDL实践一:基本数据类型的跨进程序运算
来源:互联网 发布:谢天笑 冷血动物 知乎 编辑:程序博客网 时间:2024/06/03 05:35
AIDL实践一:基本数据类型的跨进程序运算
本文是慕课网视频的练习,视频网址:http://www.imooc.com/learn/606
- 开发工具: Android Studio
- 功能: 实现跨进程的加法计算
一.编写服务端:
- 创建项目
- 在java目录同级下创建aidl文件夹,IAddAidl.aidl文件,文件内容如下:
// IAddAidl.aidlpackage com.lyj.aidldemo;// Declare any non-default types here with import statementsinterface IAddAidl { int add(int num1,int num2);}
可以看到,我们在IAddAidl.aidl中定义了一个接口,里面的方法是两个数字做加法运算
写完之后,clean一下
3. 在Java目录下创建远程服务MyService,代码如下
public class MyService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return iBinder; } private IBinder iBinder = new IAddAidl.Stub() { @Override public int add(int num1, int num2) throws RemoteException { return (num1 + num2); } };}
在这个类中,实现了IAddAidl中的方法,在客户端绑定服务的时候,返回iBinder
在Manifest中注册:
<service android:name=".MyService" android:process=":remote" android:exported="true"/>
process 表示是一个远程服务
exported属性值为true,表示其它app可以引用这个服务。
到目前为止,服务端的工作已经完成了。
二.客户端编写
- 新建一个项目或新建一个module,名字为client
- 将服务端的aidl文件夹拷贝到client下,和java目录同级,编译
- 编写客户端布局和代码
- 布局就是两个edittext输入要计算的值,一个button点击时触发计算方法,一个TextView显示运算结果,此处就略去
- 代码如下:
public class MainActivity extends AppCompatActivity { private EditText et_num1,et_num2; private Button btn_add; private TextView tv_result; private IAddAidl iAddAidl; private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { iAddAidl = IAddAidl.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { iAddAidl = null; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initAction(); //绑定服务 bindService(); } private void initView() { et_num1 = (EditText) findViewById(R.id.et_num1); et_num2 = (EditText) findViewById(R.id.et_num2); btn_add = (Button) findViewById(R.id.btn_add); tv_result = (TextView) findViewById(R.id.tv_result); } private void initAction() { btn_add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int num1 = Integer.parseInt(et_num1.getText().toString().trim()); int num2 = Integer.parseInt(et_num2.getText().toString().trim()); try { int result =iAddAidl.add(num1,num2); tv_result.setText(result+""); } catch (RemoteException e) { e.printStackTrace(); } } }); } private void bindService() { Intent intent = new Intent(); //5.0之后需要显示启动,需要完整包名 intent.setComponent(new ComponentName("com.lyj.aidldemo","com.lyj.aidldemo.MyService")); bindService(intent,conn, Context.BIND_AUTO_CREATE); } @Override protected void onDestroy() { super.onDestroy(); //onDestory()中解绑 unbindService(conn); }}
首先,在onCreate()的时候绑定了服务,注意,5.0之后需要显示启动,需要完整的包名和服务类名
其次,在服务连接(onServiceConnect())时,获取IAddAidl对象,
最后,在点击的时候,iAddAidl调用其add方法,就可以计算出值了
3.运行
先运行服务端app,然后运行客户端app,在客户端的app中并未实现加到方法,却调用服务端的方法,实现了加的运算。
4.DEMO:
http://download.csdn.net/detail/luyanjun07/9741465
0 0
- AIDL实践一:基本数据类型的跨进程序运算
- 基本数据类型的运算
- java程序的基本规则和数据类型以及运算符
- java基本数据类型的运算
- AIDL实践二:自定义数据类型
- AIDL 跨进程通信方式,的基本使用和源码理解
- AIDL的基本使用(一)
- android中的跨进程通信的实现(一)——远程调用过程和aidl
- android中的跨进程通信的实现(一)——远程调用过程和aidl
- android中的跨进程通信的实现(一)——远程调用过程和aidl
- Android中的跨进程通信的实现(一)——远程调用过程和aidl
- 关于AIDL的跨进程通信
- Android跨进程通信-AIDL的使用
- 跨进程通信AIDL的学习
- Service基本入门及AIDL跨进程通讯
- 一、基本数据类型的转换
- 一、Python的基本数据类型
- Service跨进程调用服务三部曲之AIDL详解(一)
- SQL的一些常用语法
- 多播地址
- javascript实现简单的tab选项卡
- geode集群配置服务概述
- (七)实际项目中常用的加密算法及使用场景
- AIDL实践一:基本数据类型的跨进程序运算
- android获取url字符串中的参数
- 图解SQL的JOIN-来自酷壳
- Ganglia 权威指南-安装Ganglia过程
- JAVA 面试题(二)
- 算一算,你的年终奖能活几天?
- (八)实际项目中涉及到的缓存数据结构及算法
- win7的python连接mysql用法
- 关于二分图判定的心得(参考挑战程序设计)