Android AIDL中Map参数传递的问题详解
前言
AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。
我们都知道aidl是支持map作为参数传递的,但前提是map不能是泛型并且数据类型必须是aidl所支持的String,int等的Map参数:
interface IMyAidl { void test(Map<String,String> datas); }
本以为这样写就可以正常往下进行了,但是这样会有错,抛出如下异常:
上述错误中首先说明不知道如何创建Map<K,V>container,但是aidl肯定是支持map参数传递的。最后还指出,这是一个不知道的类型。
这确实是一个问题。
解决方法
我在网上查了一些资料,发现很少介绍这一方面的。最后在不断的尝试中发现如下写法能解决:
interface IMyAidl { void test(in Map datas); }
这里需要注意,如果map前面没有in修饰符,也会抛出异常:
所以在使用的时候map必须声明为in、out或者inout。接下来就能直接使用了。
因为网上对于此问题记录太少,所以我写出来解答与我一样遇到此问题的人。
备注:至于为什么这样使用,目前还不太清楚,请多指教。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
您可能感兴趣的文章:
- Android应用程序四大组件之使用AIDL如何实现跨进程调用Service
- 使用Android studio创建的AIDL编译时找不到自定义类的解决办法
- Android 使用【AIDL】调用外部服务的解决方法
- 基于Android AIDL进程间通信接口使用介绍
- Android程序设计之AIDL实例详解
- 实例讲解Android中的AIDL内部进程通信接口使用
- Android AIDL——进程通信机制详解
- Android Studio创建AIDL文件并实现进程间通讯实例
- Android编程实现AIDL(跨进程通信)的方法详解
- Android中如何利用AIDL机制调用远程服务
相关推荐
-
实例讲解Android中的AIDL内部进程通信接口使用
首先描述下我们想要实现的内容,我们希望在一个应用中通过点击按钮,去操作另一个进程中应用的音乐播放功能. 如图,我们点击"播放"时,系统就会去远程调用我们提供的一个service(与当前service不是同一个应用哦),然后操作service中的音乐播放,点击"停止"则会终止播放.想要重新播放的话,必须先点"销毁service",再点播放按钮哦.(至于这里为什么要先点销毁按钮才能播放,完全是为了给大家展示下,远程调用service时,怎么去解绑se
-
使用Android studio创建的AIDL编译时找不到自定义类的解决办法
使用AS创建ADIL文件时AS会在main文件夹下给我们生成一个aidl文件夹和一个相同包名的包,通常我们会把所有和ADIL相关的类或文件放在这个包下,但是如果存在自定义的类时,程序编译时无法通过,提示找不到自定义的包.解决办法如下,在启动Module的build.gradle中加入如下代码: sourceSets { main { manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java', '
-
Android编程实现AIDL(跨进程通信)的方法详解
本文实例讲述了Android编程实现AIDL(跨进程通信)的方法.分享给大家供大家参考,具体如下: 一. 概述: 跨进程通信(AIDL),主要实现进程(应用)间数据共享功能. 二. 实现流程: 1. 服务器端实现: (1)目录结构,如下图: (2)实现*.aidl文件: A. IAIDLService.aidl实现: package com.focus.aidl; import com.focus.aidl.Person; interface IAIDLService { String getN
-
Android程序设计之AIDL实例详解
通常来说,AIDL这项技术在我们的应用开发过程中并不是很常用,虽然新浪微博提供了SSO登录,但是其原理就是使用AIDL.本文就以完整的实例形式讲述了AIDL的原理及实现方法. AIDL(AndRoid接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要在一个Activity中, 访问另一个Service中的某个对象, 需要先将对象转化成 AIDL可识别的参数(可能是多个参数), 然后使用AIDL来传递这些参数,
-
Android应用程序四大组件之使用AIDL如何实现跨进程调用Service
一.问题描述 Android应用程序的四大组件中Activity.BroadcastReceiver.ContentProvider.Service都可以进行跨进程.在上一篇我们通过ContentProvider实现了不同应用之间的跨进程调用,但ContentProvider主要是提供数据的共享(如sqlite数据库),那么我们希望跨进程调用服务(Service)呢?Android系统采用了远程过程调用(RPC)方式来实现.与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言
-
Android 使用【AIDL】调用外部服务的解决方法
在Android 中有一种服务说是服务其实倒不如说是一个接口,这个接口名为:Android Interface Definition Language ,这个接口可提供跨进程访问服务,英文缩写为:AIDL. 此种服务的好处在于,多个应用程序之间建立共同的服务机制,通过AIDL在不同应用程序之间达到数据的共享和数据相互操作,下面将通过一个DEMO 演示AIDL 是如何为应用程序之间提供服务的.本文大纲为:•1.创建AIDL 服务端.•2.创建AIDL 客户端.•3.客户端调用服务端提供的服务接口.
-
Android Studio创建AIDL文件并实现进程间通讯实例
在Android系统中,跨进程通信是非常普遍的事情,它用到了Binder机制处理进程之间的交互.Binder机制会开放一些接口给Java层,供android开发工程师调用进程之间通信.这些接口android封装到了AIDL文件里,当我们项目用到跨进程通信时可以创建.aidl文件,.aidl文件可以协助我们达到跨进程的通信.下面简单介绍用AndroidStudio创建AIDL文件的过程. a.新建AIDL文件 1.项目文件夹右键---> new --->选择AIDL 2.自定义一个接口名称 3.
-
Android AIDL——进程通信机制详解
Android AIDL, Android进程机制通信机制,这里就整理下AIDL 的知识,帮助大家学习理解此部分知识! 什么是 AIDL AIDL 全称 Android Interface Definition Language,即 安卓接口描述语言.听起来很深奥,其实它的本质就是生成进程间通信接口的辅助工具.它的存在形式是一种 .aidl 文件,开发者需要做的就是在该文件中定义进程间通信的接口,编译的时候 IDE 就会根据我们的 .aidl 接口文件生成可供项目使用的 .java 文件,这和
-
基于Android AIDL进程间通信接口使用介绍
AIDL:Android Interface Definition Language,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口. ICP:Interprocess Communication ,内部进程通信. 使用: 1.先创建一个aidl文件,aidl文件的定义和java代码类似,但是!它可以引用其它aidl文件中定义的接口和类,但是不能引用自定义的java类文件中定义的接口和类,要引用自定义的接口或类,需要为此类也定义一个对应的aidl文件,并且此
-
Android中如何利用AIDL机制调用远程服务
在Android中,每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢?显然, Java中是不支持跨进程内存共享的.因此要传递对象,需要把对象解析成操作系统能够理解的数据格式,以达到跨界对象访问的目的.在JavaEE中,采用RMI通过序列化传递对象.在Android中,则采用AIDL(Android Interface DefinitionLanguage:接口描述语言)方式实现. AIDL是一种接口定义语言,用于约束两个进程间的通讯规则,供编译器生成代码,实现Andro
随机推荐
- codeigniter实现get分页的方法
- 通过数据库对Django进行删除字段和删除模型的操作
- Lua利用cjson读写json示例分享
- 如何获取C++类成员虚函数地址的示例代码
- java Thread 多线程
- Microsoft SQL Server 安全问题
- IE6下focus与blur错乱的解决方案
- Bootstrap轮播加上css3动画,炫酷到底!
- Ajax跨域实现代码(后台jsp)
- ASP.NET MVC从控制器传递数据到视图的四种方式详解
- destoon实现底部添加你是第几位访问者的方法
- datatable生成excel和excel插入图片示例详解
- python修改字典内key对应值的方法
- Ajax中通过JS代码自动获取表单元素值的示例代码
- jQuery each函数源码分析
- FileUpload上传图片(图片不变形)
- 详细介绍Python语言中的按位运算符
- innerHTML,outerHTML,innerText,outerText的用法及区别解析
- 对比C语言中memccpy()函数和memcpy()函数的用法
- pppoe技术介绍