android开发aidl使用

50人阅读 评论(0) 收藏 举报
分类:

最近写了一个aidl,发现有很多忘记了,感觉还是好记性不如烂笔头呀.特此记录下以便以后使用参考

一,创建service和client端,可以是二个不同的APP,也可以在同一个应用中使用二个进程.本文通过创建二个应用实现.aidl一般int ,long , boolean , float ,double, String ,和序列化对象

1,服务端创建序列化对象实现序列号接口

public class Book implements Parcelable{
    private String name;
    private String price;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public static Creator<Book> getCREATOR() {
        return CREATOR;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.name);
        dest.writeString(this.price);
    }

    public Book() {
    }

    protected Book(Parcel in) {
        this.name = in.readString();
        this.price = in.readString();
    }

    public static final Creator<Book> CREATOR = new Creator<Book>() {
        @Override
        public Book createFromParcel(Parcel source) {
            return new Book(source);
        }

        @Override
        public Book[] newArray(int size) {
            return new Book[size];
        }
    };

    public void readFromParcel(Parcel reply) {

    }
}

2,创建同序列号相同的aidl类,包名必须相同否则会报无法找到序列号对象

// Book.aidl
package com.learn.www.service;

// Declare any non-default types here with import statements
parcelable Book;

3,创建序列号管理接口,导入序列化对象包名

// IBookManager.aidl
package com.learn.www.service;

// Declare any non-default types here with import statements
import com.learn.www.service.Book;
interface IBookManager {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
     List<Book> getBookItem();
     void addBook(inout Book book);//in 表示客户端输出,out表示服务端输出,inout表示服务端最终代替客户端输出

}

4,服务端创建service并清单文件中配置

public class MyService extends Service {
    private static List<Book> list=new ArrayList<>();
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return new MyBinder();
    }
    static class MyBinder extends IBookManager.Stub{

        @Override
        public List<Book> getBookItem() throws RemoteException {
            Book book = new Book();
            book.setName("服务端传输");
            book.setPrice("服务端价格");
            list.add(book);
            return list;
        }

        @Override
        public void addBook(Book book) throws RemoteException {
            String name = book.getName();
            String price = book.getPrice();
            Log.e("==============","客户端"+name+price);
        }
    }
}
清单文件配置
 <service android:name=".MyService">
            <intent-filter >
                <action android:name="com.learn.www.service.aidl"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </service>

二,1,客户端直接拷贝服务端aidl文件


2,开启aidl实现通信

 Intent intent = new Intent();
        intent.setPackage("com.learn.www.service");
        intent.setAction("com.learn.www.service.aidl");
        bindService(intent, new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                mstub = IBookManager.Stub.asInterface(service);
                Log.e("==============","开始可以通信");
            }

            @Override
            public void onServiceDisconnected(ComponentName name) {

            }
        },BIND_AUTO_CREATE);
    }
    //获取服务端传递过来的信息
    public void get(View view) {
        try {
           List<com.learn.www.service.Book> bookItem = mstub.getBookItem();
            Book book = bookItem.get(0);
            Log.e("==============",book.getName());
            Log.e("==============",book.getPrice());
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

            
查看评论

ant 打包含aidl文件的Android多渠道包

打多渠道不多说了,说说打aidl文件的(aidl不解释) 1.配置aidl.exe文件路径: 2.写个target,来编译aidl 3.将aidl生成的java文件,co...
  • tenggangren
  • tenggangren
  • 2014-11-05 17:50:57
  • 1381

Android中AIDL的基本用法

转载自:http://flrito.cc/notes-androidzhong-aidlde-ji-ben-yong-fa/ 早些时候就听说过AIDL,也常在各种Android面试题、教程甚至大...
  • fwt336
  • fwt336
  • 2016-09-19 16:57:09
  • 7822

Android开发之AIDL实现原理解析(源代码分享 )

在开始本章之前,先向大家介绍COM的一个概念---------Proxy/Stub结构(代理/存根结构) Android就是在传统的C/S架构中加入了一层,实现IPC。我们下面来详细介 绍一下andr...
  • u013900875
  • u013900875
  • 2014-04-16 12:53:35
  • 3581

Android使用AIDL实现跨进程通讯(IPC)

前言:在还没有做任何一件事情之前,千万不要觉得这件事情很难,因为还没有开始做内心就已经对这件事情产生了恐惧,这将会阻止你的进步,也许当你动手开始做了这件事后发现其实并不是很难。一、 AIDL概述含义:...
  • ydxlt
  • ydxlt
  • 2016-03-08 21:45:58
  • 4772

android开发之AIDL用法_进程间通信原理详解

转自http://blog.csdn.net/saintswordsman/article/details/5130947 欢迎阅读本文,你能关注本文,你知道你需要进程间通信、需要AIDL(以及Bin...
  • jason0539
  • jason0539
  • 2014-01-07 10:59:16
  • 9303

Android开发 AIDL使用自定义对象作参数或返回值

默认,AIDL支持对象作参数,但需要该对象实现Parcelable接口,且aidl文件应该是该类在同一包下,需要单独给该类定义一个aidl文件. 定义模型类: EnglishItem.java: ...
  • cyp331203
  • cyp331203
  • 2014-10-26 16:26:06
  • 1964

android之AIDL跨进程通信详解

背景一直以来都只是听说AIDL是跨进程的,但都由于项目中也没涉及到,所以也从来都没彻底去了解过,最近空闲下来去了解插件化开发原理,看着看着正好涉及到Ibinder以及android用到的AIDL,于是...
  • zhongwn
  • zhongwn
  • 2017-02-23 18:18:53
  • 1815

AIDL使用以及原理分析

AIDL使用以及IPC原理分析(进程间通信)概要为了大家能够更好的理解android的进程间通信原理,以下将会从以下几个方面讲解跨进程通讯信: 1. 必要了解的概念 2. 为什么要使用aidl进程间通...
  • tgbus18990140382
  • tgbus18990140382
  • 2016-10-12 19:55:51
  • 2700

android开发中通过aidl实现远程方法调用

在安卓开发过程中我们可能见过这样的问题,就是在一个应用中调用另一个应用中的服务,并调用该服务中的方法。我们可能对调用服务并不陌生,可是要执行服务中的方法,却不能直接调用。因为两个服务和调用它的程序属于...
  • qq_28859405
  • qq_28859405
  • 2016-09-20 09:28:27
  • 1809

android studio aidl用法详解

在我们android开发中经常会遇到进程间通信,android提供了一种解决方案就是aidl,下面我来介绍一下如何在android studio中实现aidl。 1、在android studio中创...
  • jingzailongxin
  • jingzailongxin
  • 2016-07-07 09:45:59
  • 7230
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 648
    排名: 7万+
    文章分类
    最新评论