AIDL:Android接口定义语言浅解

Android Interface Definition Language即AIDL,这个名字好高端:接口定义语言。什么意思?

就是跨进程数据通信的方式,为啥不能直接通信还要搞个这个?

因为所以自然道理,呵呵。

因为他们本来不能通信,为啥不能通信呢?

因为在不同的进程,为什么在不同的进程不能通信呢?

因为每个进程有自己的内存区域存储数据,一个进程不能访问另外一个进程的内存空间,为啥不能访问呢?

因为所以自然道理,去他的自然道理,google不让你访问就是不让你访问,哪来的这么多问号啊?????????????

不过人家谷歌还是讲道理的,不让你访问是因为安全考虑,你能随便进别人家吗,然当不能了,除非人家给你钥匙啊----AIDL

但是话又说回来了,我在自己家(一个app一个进程)干嘛要去别人家?

你不听音乐啊(音乐后台播放),你不微信啊(微信消息推送),你不打电话啊(开启拨打号码,打电话实际上也是一个app应用,当然了这是系统的的跨进程通信,使用的是intent),当然了可以干的事情很多了,你也可以有两个家啊(启动远程service)。

当然了进程间通信(IPC),也可以用Message来实现,message内部也是用AIDL实现的。

如果确实需要IPC,但是无需处理多线程,那么就应该通过Messenger来实现。Messenger保证了消息是串行处理的

在有IPC需求,同时服务端需要并发处理多个请求的时候,使用AIDL才是必要的

我们来自己做把钥匙AILD简单实现

1.新建一个aidl文件

2.文件目录会增加AIDL文件夹和你刚增加的文件

3.这是一个接口,所以你要在里面增加你需要的方法

    interface IMyAidlInterface {

        void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
        double aDouble, String aString);
        //增加一个两个参数的方法
        int change(int a,int b);
}

4.rebuild一下,系统会帮你新建一个IMyAidlInterface的java文件,然后不用管了,改天再细说这个文件

5.写一个service,里面返回的IBinder对象就是IMyAidlInterface.Stub,实现刚才我们的change(int a, int b)方法。

  public class MyService extends Service {

private final IMyAidlInterface.Stub mStub  = new IMyAidlInterface.Stub() {
    @Override
    public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double     
         aDouble, String aString) throws RemoteException {

    }

    @Override
    public int change(int a, int b) throws RemoteException {
        //打印一下service的进程id
        System.out.println("service所在的进程是: " + android.os.Process.myPid());
       //返回a,b的和
        return a+b;
    }
};

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return mStub;
}
 }

6.注册我们的service,让其运行在不同进程:

  <service 
             android:name=".MyService"
             android:process=":remote"
             android:enabled="true"
             android:exported="true"/>

7.activity里面绑定service,然后启动,我们就可以和service通信了

public class MainActivity extends AppCompatActivity {

private IMyAidlInterface serice;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Intent intent = new Intent();
    intent.setClass(this,MyService.class);
    bindService(intent,conn,BIND_AUTO_CREATE);

}

private ServiceConnection conn = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
         serice = IMyAidlInterface.Stub.asInterface(service);
        try {
            int change = serice.change(22, 33);
            System.out.println("MainActivity所在的进程是:" +android.os.Process.myPid());
            System.out.println("22+33的值是;"+change);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        serice=null;
    }
};
}

8.看看打印的线程和返回的数值:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容