进程间通信Aidl的简单案例
来源:互联网 发布:2000w数据 在线查询 编辑:程序博客网 时间:2024/05/16 04:14
最近,在学习Android进程间通信,发现用的比较多的是aidl,想在网上找点demo来看一下,但是我找了很久,没找到我觉得满意的代码,要么是文字写的太含蓄了看不懂,要么是代码长的看不进去,其实我就是想找个demo运行一下,看一看效果再来分析其中aidl的原理,于是就自己敲了一个demo,仅供参考,如下:
首先是写服务端代码:
ICat.aidl代码:
packagestartimes.com.aidlservice;
// Declare any non-default types here with import statements
interface ICat { String getColor(); double getWeight();}
AidlService.java代码:
public class AidlService extends Service { private CatBinder catBinder; Timer timer=new Timer(); String[] colors=new String[]{"红色","黄色","黑色"}; double[] weights=new double[]{2.3,3.1,1.58}; private String color; private double weight; //继承Stub,也就是实现了ICat接口,并实现了IBinder接口 public class CatBinder extends ICat.Stub { @Override public String getColor() throws RemoteException { return color; } @Override public double getWeight() throws RemoteException { return weight; } } @Override public void onCreate() { super.onCreate(); catBinder=new CatBinder(); timer.schedule(new TimerTask(){ @Override public void run() { //随机地改变Service组件内color,weight属性的值 int rand= (int) (Math.random()*3); color=colors[rand]; weight=weights[rand]; System.out.println("--------"+rand); } },0,800); } @Nullable @Override public IBinder onBind(Intent intent) { //返回catBinder对象,在绑定本地Service的情况下,该catBinder //对象会直接传给客户端的ServiceConnection对象的onServiceConnected //方法的第二个参数;在绑定远程Service的情况下,只将catBinder对象的代理 //传给客户端的ServiceConnection对象的onServiceConnected方法的第二个参数; return catBinder; } @Override public void onDestroy() { timer.cancel(); }}
MainActivity.java中代码:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}
AndroidManifest.xml中添加:
运行一下看一看。<service android:name=".AidlService" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="startimes.com.aidlservice.Aidl_Service"/> </intent-filter></service>
然后将服务端aidl文件夹拷到客户端中,客户端代码:
public class AidlClient extends Activity { private ICat catService; private Button get; EditText color,weight; private ServiceConnection conn=new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { //获取远程Service的onBind方法返回的对象代理 catService=ICat.Stub.asInterface(iBinder); get.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { //获取,并显示远程Service的状态 color.setText(catService.getColor()); Toast.makeText(AidlClient.this,catService.getColor()+"",Toast.LENGTH_LONG).show(); weight.setText(catService.getWeight()+""); }catch (Exception e){ e.printStackTrace(); } } }); } @Override public void onServiceDisconnected(ComponentName componentName) { catService=null; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_aidl_client); get= (Button) findViewById(R.id.get); color= (EditText) findViewById(R.id.color); weight= (EditText) findViewById(R.id.weight); //创建所需绑定服务的Intent Intent intent = new Intent(); intent.setAction("startimes.com.aidlservice.Aidl_Service"); //绑定远程服务 bindService(intent,conn, Service.BIND_AUTO_CREATE); } @Override protected void onDestroy() { super.onDestroy(); //解除绑定 this.unbindService(conn); }}布局代码:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" ><Button android:id="@+id/get" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="获取远程服务" /> <EditText android:id="@+id/color" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="颜色" /> <EditText android:id="@+id/weight" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="权重" /></LinearLayout>注意:先运行服务端代码,会退后,在运行客户端代码,效果
服务端:
客户端:
代码链接:https://github.com/HotBloodMan/CommonCode/blob/master/AIDLdemo.zip
0 0
- 进程间通信Aidl的简单案例
- 使用AIDL完成一次简单的Android进程间通信
- Android进程间通信-AIDL的简单使用
- android进程间通信AIDL的简单实现。
- 进程中简单的AIDL通信实现
- android 进程间通信 aidl 简单理解
- AIDL 进程间通信
- AIDL 进程间通信
- AIDL 进程间通信
- AIDL 进程间通信
- AIDL进程间通信
- AIDL:进程间通信
- AIDL进程间通信
- AIDL 进程间通信
- aidl 进程间通信
- AIDL进程间通信
- 进程间通信---AIDL
- AIDL进程间通信
- Android中实用小知识
- Nginx+Tomcat集群解决均衡负载及生产环境热部署
- topcoder乱作系列2 srm503 srm504
- android支付宝的使用
- Java多线程中static变量的使用
- 进程间通信Aidl的简单案例
- NOIP2012 T3开车旅行 set+倍增
- 基于XMPP开发学习------(1)登录
- 深入理解Java虚拟机之早期编译器优化
- 关于MySql Left Join
- 提高iOS开发效率的方法和工具
- Mybatis框架学习笔记 lesson2
- Cocoapods相关
- asp.net通过MySql.Data.DLL方式使用mysql