安卓IPC之aidl使用(二)---aidl本地实现
来源:互联网 发布:算法设计与分析王秋芬 编辑:程序博客网 时间:2024/06/03 12:26
安卓IPC之aidl使用(二)—aidl本地实现
安卓IPC之aidl使用(三)—System aidl调用
安卓IPC之aidl使用(一)–aidl常见使用
一直都以为aidl必须写一个服务端是吧,那样岂不是有时候需求怎么实现,如果app的service和client属于同一app,那样实现是不是更好的满足我们的需求呢。
本例子我们实现一个很简单的例子:实现2个数相加
// ILocal.aidlpackage com.losileeya.localaidl;// Declare any non-default types here with import statementsinterface ILocal { int add(in int num1,in int num2);}
因为不需要在写service了,所以我们这里需要写LoaclAidlService
package com.losileeya.localaidl;import android.app.Service;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.IBinder;import android.os.RemoteException;import android.support.annotation.Nullable;/** * User: Losileeya (847457332@qq.com) * Date: 2016-07-10 * Time: 11:09 * 类描述: * * @version : */public class LoaclAidlService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return new MBinder(); } class MBinder extends ILocal.Stub{ @Override public int add(int num1, int num2) throws RemoteException { return doAdd(num1,num2); } } private int doAdd(int num1, int num2) { return num1+num2; } public class LocalConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { service= (IBinder) ILocal.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { name=null; } }}
然后使用也很简单
package com.losileeya.localaidl;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.os.RemoteException;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private ILocal iLocal=null; private EditText etNum1,etNum2,etResult; private Button btnCalculate; private LocationConnection connection=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); bindService(); } private void initView() { etNum1= (EditText) findViewById(R.id.et_num1); etNum2= (EditText) findViewById(R.id.et_num2); etResult= (EditText) findViewById(R.id.et_result); btnCalculate= (Button) findViewById(R.id.btn_calculate); btnCalculate.setOnClickListener(this); } private void bindService() { connection=new LocationConnection(); Intent intent=new Intent(); intent.setComponent(new ComponentName("com.losileeya.localaidl","com.losileeya.localaidl.LoaclAidlService")); bindService(intent,connection, Context.BIND_AUTO_CREATE); } class LocationConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { iLocal = ILocal.Stub.asInterface((IBinder)service); } @Override public void onServiceDisconnected(ComponentName name) { iLocal=null; } }; @Override protected void onDestroy() { super.onDestroy(); unbindService(connection); connection=null; } @Override public void onClick(View v) { int num1=Integer.parseInt(etNum1.getText().toString().trim()); int num2=Integer.parseInt(etNum2.getText().toString().trim()); try { int result=iLocal.add(num1,num2); etResult.setText(result+""); } catch (RemoteException e) { e.printStackTrace(); etResult.setText("失败"); } }}
是不是和前面一个例子使用起来没有什么两样,只不过把LoaclAidlService搬到客户端来了(2合一了是吗)。仔细一看,还是有一点的区别,请仔细对照代码自行体会。
清单配置LoaclAidlService
<service android:name=".LoaclAidlService" android:process=":remmote"> <intent-filter> <action android:name="com.losileeya.localaidl.LoaclAidlService"></action> </intent-filter> </service>
这里把service 标记为android:process=”:remmote”,这样aidl就能被远程调用了。
效果如下:
demo 传送门:AIDLMaster
2 0
- 安卓IPC之aidl使用(二)---aidl本地实现
- 安卓IPC之aidl使用(一)--aidl常见使用
- 安卓IPC之aidl使用(三)---System aidl调用
- 安卓IPC(进程间通信)之AIDL基本使用
- 使用AIDL实现IPC
- Android IPC 之 AIDL (二)
- IPC之AIDL(1)实现AIDL
- IPC机制<二>AIDL
- Android开源项目之Music (二)--- AIDL实现IPC进程间通讯
- android使用AIDL实现跨进程通讯(IPC)
- android使用AIDL实现跨进程通讯(IPC)
- 示例:Android使用AIDL实现跨进程通讯(IPC)
- Android进阶:AIDL实现IPC使用详解
- android studio 使用AIDL实现IPC
- 在Android使用AIDL实现IPC机制
- Android IPC之AIDL
- Android IPC 之AIDL
- Android IPC之AIDL
- 《剑指offer》面试题67 机器人的运动范围
- mysql的mvcc(多版本并发控制)
- c++学习笔记(1)复合类型
- OFFER(1)-图文并茂详解二进制中1的个数
- vector
- 安卓IPC之aidl使用(二)---aidl本地实现
- 统计数字问题。给定一本书,其中包含n页,计算出书的全部页码中用到了多少个数字0…9。
- 01背包变化4
- java学习之路 之 网络编程
- sshhipot:一款高交互的SSH蜜罐
- Android数据存储详解
- Maven-archetype和plugin
- javascript入门基础(三) 正则表达式
- 关于LeetCode中Remove Linked List Elements一题的理解