Aidl 实现进程之间的通讯

Android AIDL 教程 (一)—,安卓面试题高级 and return values in AIDL. */ void connect(String mes); void disConnect(String mes); } 这个 aidl 文件很接口,只有两个方法,connect 和 disConnect 方法。 这里我们把 aidl 文跟 Java 文件中放在一起,需要在 build.gradle 中配置 sourceSets { main { jniLibs.srcDirs = [‘libs’] aidl.srcDirs = [‘src/main. 阅读详情
    遇到进程之间相互通讯的问题时,谷歌官方给我们提供了一种aidl 的方式,通过service 使用,使用方式如下:
first step :
        在as project main 目录下 新建一个 aidl 文件,将文件名改为和包名不一样(因为这个包名和类名也要用在另一个项目中),可以建完之后新建一个包,将接口文件拷贝过去即可。

Next:
        在另一个app 中同样目录下copy 上边aidl 文件,   并新建service类, service 类中代码,主要是 在onBind() 方法中返回一个,自定义的实现了 Ibinder 接口的类, aidl接口内部 stub内部抽象类 实现了这个接口,可作为 Bind的参数返回,代码如下:
package com.example.bitch.aidluse;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;

import com.bitch.aidl.IMyAidlInterface;
import com.bitch.aidl.IMyAidlInterface.Stub;

public class MyService extends Service {

    private static final  String text ="我是来自service 的";
    private static final String TAG =MyService.class.getSimpleName();

    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        return new MyBind();
    }

    class MyBind extends IMyAidlInterface.Stub{

        @Override
        public String getText() throws RemoteException {
            return text;
        }

        @Override
        public void printText(String text) throws RemoteException {


            Log.d(TAG, "printText: -------->"+"使用我aidl 的界面 调用我喽");

        }
    }

}

next :

在other app 的MainActivity ,绑定firstActivity 的服务,并从aidl 接口实现方法中获取值 代码如下:

package com.example.testaidl;

import android.content.ComponentName;
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.widget.Toast;

import com.bitch.aidl.IMyAidlInterface;

public class MainActivity extends AppCompatActivity implements ServiceConnection {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //start bind servie where is in other app
        Intent intent = new Intent();
        intent.setClassName("com.example.bitch.aidluse","com.example.bitch.aidluse.MyService");

        //you can get HowTOgetit  from parameter
        bindService(intent,this,BIND_AUTO_CREATE);
    }

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {

        //when connnect
        IMyAidlInterface iMyAidlInterface = IMyAidlInterface.Stub.asInterface(service);
        try {
            String text = iMyAidlInterface.getText();
            Toast.makeText(this, text, Toast.LENGTH_SHORT).show();

            //call service
            iMyAidlInterface.printText("回调你喽");
        } catch (RemoteException e) {
            e.printStackTrace();
        }


    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
 /**
     * unbind method 
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbindService(this);
    }
}
深入解析Android AIDL:实现跨进程通信的利器 AIDL支持多种数据类型,包括基本数据类型、自定义数据类型和其他AIDL接口类型。在AIDL中,自定义数据类型需要使用parcelable关键字进行声明。 阅读详情

相关推荐

Android之AIDL服务

AIDL服务        服务(Service)是android系统中非常重要的组件。Service可以脱离应用程序运行。也就是说,应用程序只起到一个启动Service的作用。一但Service被启动,就算应用程序关闭,Service仍然会在后台运行。        android系统中的Service主要有两个作用:后台运行和跨进程通讯。后台运行就不用说了,当Service启动后,就可

码莎拉蒂 2963

Android进程间通讯AIDL

一、原因: Android每个应用因为有独立的虚拟机,独立的内存空间,所以不能通过共享内存来进行数据交互。           其中有两种交互方式,一种是RPC另一种是IPC,RPC是指直接调用其他应用的方法,IPC只是进行进程间的通讯。           二:常见的进程间通讯的方式: Bundle、Messager、AIDL、ContentProvider、Socket、Broadcast...

做你想做的,在所不惜。 322

从宁德新能源面试官视角,拆解Halcon/OpenCV图像处理工程师的硬核技能树(附避坑指南)

本文从宁德新能源面试官视角出发,详细拆解Halcon/OpenCV图像处理工程师的核心技能树,涵盖硬件选型、算法实现和系统工程思维三大能力维度。文章提供工业视觉工程师面试的实战避坑指南,包括硬件配置要点、算法优化技巧及职业发展路径,助力求职者系统提升图像处理专业技能。

weixin_28732953的博客 129

【Android开发】Android跨进程通讯(AIDL)官方文档及官方Demo讲解

第一章、 关于Android跨进程的思考先来回顾一下操作系统中的一些概念。  同一个进程中可以有多个线程,线程间通信可以直接取得地址。因为Java程序的内存分配在连续的地址空间。  默认一个Java程序会开启一个进程,运行在JVM中。但是一个JVM是可以开启多个进程的。  一个或多个操作系统可以开启多个JVM,多个JVM之间依赖TCP通讯的方法调用即Java的RMI(Remo

BrilliantEagle的专栏 4899

二阶锥松弛在配电网最优潮流计算中的应用(IEEE33节点配电网最优潮流算例matlab程序)(yalmip+cplex)

文献[7]建立了以支路潮流计算为基础的OPF模型,针对OPF中的非凸性约束,采用SOCR技术将其松弛为二阶锥约束,整个 OPF 模型则被转化为二阶锥规划( Second Order Cone Programming,SOCP)问题,对其求解可以得到全局最优解。其次结合辐射型配电网潮流特点建立支路潮流约束,并考虑配电网中的可控单元,包括分布式电源和离散、连续无功补偿装置,建立其出力约束,该模型为非凸非线性模型;式中,αj,t和βij,t分别为t时段内节点i电压的二次方和支路ij电流的二次方。

weixin_47365903的博客 1万+

多模态情感识别(MER)数据集实战指南:从IEMOCAP到应用落地

本文提供了多模态情感识别(MER)从数据集到应用落地的完整实战指南。以经典IEMOCAP数据集为例,详细讲解了音频、视觉、文本等多模态数据的预处理、特征提取与融合技术,并分享了模型训练调优心得及面向智能客服、在线教育等场景的部署考量,帮助开发者快速构建高效可用的MER系统。

h3i4j的博客 1071

AIDL实现两个进程间的简单通信案例

Server端实现 1. 新建Server空项目,然后按如下方式新建IPerson.aidl文件: 2. 修改IPerson为: package com.example.chemins.testlina; interface IPerson { String queryPerson(int num); } 3. 接着按ctrl + f9重新编译,完成后,就会发现在Build目录下生成了IP...

na2609613672的博客 507

别再傻傻分不清PBR和NPR了!从《原神》到《双城之战》,聊聊游戏里那些让你眼前一亮的渲染风格

本文深入解析了PBR(基于物理的渲染)与NPR(非真实感渲染)在游戏视觉风格中的应用差异,通过《原神》和《双城之战》的案例,展示了两种渲染技术如何创造出截然不同的艺术效果。从技术原理到实战案例,帮助读者理解如何根据项目需求选择合适的渲染风格。

weixin_30425949的博客 147

使用AIDL实现两个APP之间跨进程通信

昨天我们主管说准备把项目拆分一下,因为现在项目依赖了好几个负责串口通讯Library,准备把这些Library变成独立的APP,通过Android跨进程机制进行数据交互。然后让我写一个跨进程通信的Demo,然后测试。 一、同一个APP内跨进程通信 跨进程通信的方式有好几种,我这里用的是AIDL的方式。 ...

正义 3601

深入解析set_clock_groups:异步时钟约束的最佳实践与陷阱规避

本文深入解析了FPGA/芯片设计中set_clock_groups命令在异步时钟约束中的核心作用与最佳实践。文章对比了同步时钟、异步时钟与不重叠时钟的区别,强调了正确使用set_clock_groups避免时序分析陷阱的重要性,并提供了与set_false_path的优先级差异分析及实战规避方法,帮助设计者确保时序收敛与电路可靠性。

weixin_29232121的博客 374

【用unity实现100个游戏之7】实现一个类《杀戮尖塔》的卡牌回合制游戏(附项目源码)

【用unity实现100个游戏之7】实现一个类《杀戮尖塔》的卡牌回合制游戏(附项目源码)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

AIDL实现不同应用之间跨进程通讯及传递与返回各种数据类型和远程接口回调

含义:AIDL(Android Interface Definition Language),是android接口定义语言,这种语言定义了一个客户端和服务器通讯接口的一个标准、规范。为什么要有AIDL?  我们都知道android中的四大组件Activity,Broadcast,Content Provider,Service,前面我们应该都接触过除了Service的其他三个组件的进程间通讯的例子

啊sir的专栏 4412

Could not create cache adapter cache factory not found: factory for cache adapter ““ was not regist

RROR: Could not create cache adapter error=cache factory not found: factory for cache adapter "" was not registered ERROR: Job failed (system failure): Error response from daemon: OCI runtime create failed: container_linux.go:349: starting co...

知无涯 4034

android 多进程通信,Android中进程间通讯 AIDL

Android中进程间通讯 AIDLIDL Interface Description Language 接口描述语言AIDL Android IDL适用场景:client进程必须是Activity,服务端进程必须是Serviceaidl解决两个项目间通讯(IPC进程间通讯)一个项目里必须有service。另一个项目的activity调用service里的方法需要通过一个共有的接口步骤:1.在_...

weixin_35618957的博客 266

嵌入式工程师成长之路(0)----认识元件

在电子设计与维修中,认识元件是成功的关键!面对琳琅满目的电阻、电容、电感与二极管,样子形式千奇百怪,你是否也曾陷入困难? 本文基于行业权威分类标准,结合十年工程师实战经验,深度解析4大类、30+子类电子元件的核心特性、应用场景与避坑指南,助你从“小白”秒变“电子高手”!

云轩阁 11万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android之AIDL

AIDL : Android Interface Definition Language是英文字母的缩写,即Android接口定义语言。主要是用来进行多进程间的通讯。 Android中进行通讯的方式有很多: (1).如广播(应用A在AndroidManifest.xml中注册指定Action的广播)应用B发送指定Action的广播,A就能收到信息,这样也能看成不同应用之间完成了通讯(但是这种通

life_power的博客 382

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android 进程间通信之AIDL

由于android系统中应用程序之间不能共享内存。因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些。在android SDK中提供了4种用于跨进程通讯的方式。这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service。这里介绍AIDL的方式。

YLBF_DEV的专栏 1280

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android应用中通过AIDL机制实现进程间的通讯实例

android通讯layoutservicestringimport          在Android中,每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢?显然,Java中是不支持跨进程内存共享的,因此要传递对象,需要把对象解析成操作系统能够理解的数据格式,以达到跨界对象访问的目的。在Android中,则采用AIDL(Android Interface Defin

雁峰 392

Android中跨进程通讯的4种方式

转自:http://www. androidsdn.com/article/show/137 由于android系统中应用程序之间不能共享内存。因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些。在android SDK中提供了4种用于跨进程通讯的方式。这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和

Liyunlong 526

Android AIDL

aidl 进程间通讯 一个项目的服务另一个项目绑定 项目A 项目B 项目A 1.新建服务类实现Service 2.新建包,包中新建接口interface,接口中封装对服务中的数据进行操作的方法 3.找的接口的java文件,将后缀名该为aidl 4.刷新项目,将接口中的 public去掉 5.Service中

武凯凯 384

android studio aidl例子,Android AIDL 教程 (一)—— 简单的示例-Go语言中文社区

AIDL(Android Interface Definition Language)是Android系统自定义的接口描述语言。可以用来实现进程间的通讯。在 Android 中,要实现进程间的通讯,一般来说,有以下几种方式:使用 Bundle最常见的的是我们通过特定的 Action 或者 data 启动另外一个应用的 Activity 或者 service。我们可以将要传递的数据封装在 bund...

weixin_29941275的博客 494

Android 应用开发 AIDL 基础用法实践过程小记

1、同样在应用 A 的 main 目录下新建目录命名为 aidl,再在 aidl 目录下顺次建立目录层级“/com/example/server”,该目录层级需要与应用 A 的 aidl 文件所在包名保持一致,然后将应用 A 的 aidl 文件拷贝到应用 B 同包名的目录下,然后触发一下应用 A 的构建,在应用 A 的 build目录中也需要看到该 aidl 文件对应生成的 java 文件,再进行后续操作。至此,应用 B 的编码部分完成,下面进行应用 A 的编码。前言:点滴积累,贵在坚持。

七月七日晴52000的博客 641

IPC AIDL示例-RemoteCallbackList添加移除监听

前言AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言,它是用来实现进程间通讯的,本文使用AIDL写一个小demo来实现夸进程间通讯。本文接着这一篇文章写,这篇文章有个留着的——就是远程AIDL服务端注册解绑Listener。Android AIDL示例-回调方法版先来看看服务端和客户端大体的AIDL-生成的java文件。如上图所示,蓝色框内是我们定义的AIDL文件,红色框内是自动编译生成的java文件。

chuyouyinghe的专栏 390

Activity与Service的交互二

在上一篇文章中讲解了如何利用Messenger和Binder类来实现与Activity的通信,这次就讲解下其他的两种通讯方式。不管是哪一种通讯,我们首先需要创建一个Service,下面就先创建一个Service,看过上一篇文章的就可以直接跳过这里。 Service的创建 1.创建MySerVice类继承Service并重写相关方法 public class MyService ext

ForgetFormerly的博客 537

Activity与Service之间的通讯机制

进程内与服务通信 进程内与服务通信实际上就是通过bindService的方式与服务绑定,获取到通信中介Binder实例,然后通过调用这个实例的方法,完成对服务的各种操作。 下面来看具体代码演示: MainActivity: public class MainActivity extends Activity implements View.OnClickListener { pr

wuseyukui的专栏 2482

android进程间通信(IPC--Inter Process Communication)

阿里巴巴一面

njuptsxd的专栏 560
上一篇: 解决Wifi,耳机 等广播接收两次现象
下一篇: Android内存优化图片二次采样
一朵红杏
博客等级 码龄12年 51粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值