关于AIDL的简单认识
来源:互联网 发布:苹果mac版office2016 编辑:程序博客网 时间:2024/06/05 05:16
什么是AIDL
AIDL是Android Interface Definition Language, 顾名思义,它主要就是用来定义接口的一种语言。Android提供AIDL主要用来进程
间通讯。
如何使用AIDL
1).创建aidl文件
. 在main文件下新建aidl文件夹
. 创建aidl类
.
2).编写aidl接口
package com.example.myapplication;// Declare any non-default types here with import statementsinterface IMyService { /** * Demonstrates some basic types that you can use as parameters * and return values in AIDL. */ void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString); double doCalculate(double a,double b);
3).如果使用Eclipse,Eclipse会自动在gen目录下生成对应的.java文件,如果是studio,点击Build中make Module 'AIDL'添加到编译
文件中。
4).编写Activity类,点击按钮在服务中实现两个数相加。
package com.example.myapplication;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.graphics.Color;import android.os.Bundle;import android.os.IBinder;import android.os.Parcel;import android.os.Parcelable;import android.os.RemoteException;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;/** * Created by lenovo on 2017/12/3. */public class Person extends Activity { private static final String TAG = "CalculateClient"; private Button btnCalculate; private EditText etNum1; private EditText etNum2; private TextView tvResult; private IMyService mService; private ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub //logE("disconnect service"); mService = null; } @Override public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub //logE("connect service"); mService = IMyService.Stub.asInterface(service); } }; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Bundle args = new Bundle(); Intent intent = new Intent(this, RemoteService.class); intent.putExtras(args); bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE); etNum1 = (EditText) findViewById(R.id.et_num_one); etNum2 = (EditText) findViewById(R.id.et_num_two); tvResult = (TextView) findViewById(R.id.tv_result); btnCalculate = (Button) findViewById(R.id.btn_cal); btnCalculate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //logE("开始远程运算"); try { double num1 = Double.parseDouble(etNum1.getText().toString()); double num2 = Double.parseDouble(etNum2.getText().toString()); String answer = "计算结果:" + mService.doCalculate(num1, num2); tvResult.setTextColor(Color.BLUE); tvResult.setText(answer); } catch (RemoteException e) { } } }); }// private void logE(String str) {// Log.e(TAG, "--------" + str + "--------");// }}
5).最后编写服务类
package com.example.myapplication;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.RemoteException;import android.support.annotation.Nullable;import android.util.Log;import java.util.LinkedList;import java.util.List;/** * Created by lenovo on 2017/12/3. */public class RemoteService extends Service { private static final String TAG = "CalculateService"; @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub logE("onBind()"); return mBinder; } @Override public void onCreate() { // TODO Auto-generated method stub logE("onCreate()"); super.onCreate(); } @Override public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub logE("onStart()"); super.onStart(intent, startId); } @Override public boolean onUnbind(Intent intent) { // TODO Auto-generated method stub logE("onUnbind()"); return super.onUnbind(intent); } @Override public void onDestroy() { // TODO Auto-generated method stub logE("onDestroy()"); super.onDestroy(); } private static void logE(String str) { Log.e(TAG, "--------" + str + "--------"); } private final IMyService.Stub mBinder = new IMyService.Stub() { @Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { } @Override public double doCalculate(double a, double b) throws RemoteException { return a+b; }// @Override// public double doCalculate(int a, int b) throws RemoteException {// return a+b;// }// @Override// public double doCalculate(double a, double b) throws RemoteException {// // TODO Auto-generated method stub// Log.e("Calculate", "远程计算中");// Calculate calculate = new Calculate();// double answer = calculate.calculateSum(a, b);// return answer;// } };}
阅读全文
0 0
- 关于AIDL的简单认识
- 关于委托的简单认识
- 关于GCD的简单认识
- 关于 OO 及虚拟机的简单认识
- 关于注册表的一些简单认识
- 关于strtok的一点简单认识
- 关于不同体系结构风格的简单认识
- 关于NSTimer的认识和简单使用
- 关于iOS通知的简单认识
- 关于Binder机制的简单认识
- android关于-->ActivityLifecycleCallbacks接口 的简单认识
- 认识AIDL
- android 简单的aidl
- android 简单的aidl
- AIDL的简单使用
- AIDL的简单实现
- aidl的简单使用
- 简单的AIDL通信
- [杂乱] go墙内安装以及vscode调试-windows平台
- JAVAJ基础学习之反射机制
- Retrofit的使用
- 【Scikit-Learn 中文文档】预测延迟 / 预测吞吐量 / 技巧和窍门
- ROS 2正式版终于来了,还增加了这些新特性
- 关于AIDL的简单认识
- 腾讯围棋AI绝艺战胜DeepZenGo又夺一冠
- 天天写代码,觉得自己特别苦逼?嗯,还有20年AI就来解放你
- “强化学习之父”萨顿:预测学习马上要火,AI将帮我们理解人类意识
- 2、html各类标签介绍
- 【Scikit-Learn 中文文档】使用 scikit-learn 介绍机器学习
- Php Rabbitmq 环境搭建(附一个例子)
- WSDL知识汇总
- 初学者---Android 使用SwipeBackLayout实现滑动返回上一级页面