首页 > 试题广场 >

使用AIDL完成远程service方法调用下列说法不正确的是

[单选题]
使用AIDL完成远程service方法调用下列说法不正确的是
  • aidl对应的接口名称不能与aidl文件名相同
  • aidl的文件的内容类似java代码
  • 创建一个Service(服务),在服务的onBind(Intent intent)方法中返回实现了aidl接口的对象
  • aidl对应的接口的方法前面不能加访问权限修饰符

编写Aidl文件时,需要注意下面几点:

  1.接口名和aidl文件名相同。

  2.接口和方法前不用加访问权限修饰符public,private,protected等,也不能用final,static。

  3.Aidl默认支持的类型包话java基本类型(int、long、boolean等)和(String、List、Map、 CharSequence),使用这些类型时不需要import声明。对于List和Map中的元素类型必须是Aidl支持的类型。如果使用自定义类型作 为参数或返回值,自定义类型必须实现Parcelable接口。

  4.自定义类型和AIDL生成的其它接口类型在aidl描述文件中,应该显式import,即便在该类和定义的包在同一个包中。

  5.在aidl文件中所有非Java基本类型参数必须加上in、out、inout标记,以指明参数是输入参数、输出参数还是输入输出参数。

  6.Java原始类型默认的标记为in,不能为其它标记。

发表于 2016-12-08 14:15:05 回复(1)
A
AIDL:Android Interface Definition Language,即Android接口定义语言。
Android 使用AIDL提供公开服务接口,使得不同进程间可以相互通信。

建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下:
(1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。
(2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。
(3)建立一个服务类(Service的子类)。
(4)实现由aidl文件生成的Java接口。
(5)在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。
编辑于 2015-07-05 09:18:15 回复(0)
A
aidl对应的接口名称必须与aidl文件名相同不然无法自动编译
aidl对应的接口的方法不能加访问权限修饰符(记一下)
发表于 2015-04-13 17:33:31 回复(3)
这道题涉及到Service的bindService(i, sc, Service.BIND_AUTO_CREATE)启动方法,回传参数IBinder类型的对象给onServiceConnected(ComponentName name, IBinder service)中的第二个参数.
在这里先说几点:
1、AIDL用来跨进程调用Service
2、要用AIDL定义远程接口interface
3、怎样在android项目中定义一个.aidl后缀的文件.:
首先,在eclipse左上角点击File---new--File.出现如下图一所示,我们在package里定义一个接口名字为MyIcat,接口类里可以写方法,但注意一定不能有权限修饰,要把包名写上。我写的MyIcat.aidl文件内容如下截图二,就是定义了getColor(),和getWeight()两个方法。做完上述aidl文件的定义,保存,此时工程会自动编译,在gen文件下对应的包里会生成MyIcat.java文件如下图三。这个java文件里有Sub内部类。
图一                                                           图二

图三
4、建好了AIDL 远程接口,就该写自己的public class myService extends Service {。。。。。}
下边是我写的完整的myService类, 重点是16-27行很重要,创建一个对象mBinder,因为Stub继承于Binder,实现了自定义接口MyIcat.而Binder又是IBinder的实现类,所以mBinder是IBinder类对象.这个mBinder要作为OnBind()方法的返回值,传给ServiceConnection对象里的onServiceConnected(ComponentName name, IBinder service)第二个参数。这样通过这个返回的mBinder就可以与Service通信了。

5、写好了自己的Service类,接下来写自己的Activity类。里边三个重要工作,
  • 全局静态String型常量MY_SERVICE作为Intent.setAction(xx)的参数用来启动自定义的myService。
  • 定义Intent对象i,setAction(MY_SERVICE)
  • 定义一个按钮Button
  • 创建ServiceConnection类对象 sc,覆盖接口的未实现的方法。
6、按钮点击事件里通过bindService(, , )运行Srvice,该方***去依次调用Service的onCreate()和onBind()方法。调用完onBind()后的返回值会传递给ServiceConnection对象的onServiceConnected(,)的第二个参数。

7、第49行特别重要,在AIDL中,因为OnBinder()方法返回的的是IBinder对象的***,并不是直接返回IBinder对象,所以需要49行处理.

8、最重要的是要在AndroidManifest.xml中注册myService

9、运行结果,当你点击了按钮以后,在LogCat里看到运行结果如下图所示。

先运行了service的onCreate(),再运行了onBind(),这样Service连接成功回调onServiceConnected()方法。打印color,weight
 
编辑于 2017-04-08 09:50:28 回复(0)
c返回的不是一个aidl接口类型的一个***嘛?不是对象本身啊。
发表于 2017-08-24 18:17:24 回复(1)
只有当你允许来自不同的客户端访问你的服务并且需要处理多线程问题时你才必须使用AIDL,AIDL是处理多线程、多客户端并发访问的。 http://www.2cto.com/kf/201406/312244.html
发表于 2016-04-20 17:22:35 回复(0)
AIDL:Android Interface Definition Language,即Android接口定义语言。
Android 使用AIDL提供公开服务接口,使得不同进程间可以相互通信。

建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下:
(1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。
(2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。
(3)建立一个服务类(Service的子类)。
(4)实现由aidl文件生成的Java接口。
(5)在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。
发表于 2015-10-18 22:15:35 回复(0)
必须相同
发表于 2019-09-02 22:13:41 回复(0)

服务端

1.创建aidl文件,定义方法

2.创建Service实现类,在onBind中返回aidl定义的接口

3.在Mainfest.xml文件声明serivce

客户端

1.定义与服务端相同的aidl文件,包名路径也要相同

2.在使用是创建serivceConnection来接收接口

3.使用接口中的方法


发表于 2019-03-25 19:33:04 回复(0)
A:
aidl对应的接口名称必须与aidl文件名相同,不然无法自动编译,所以A是说法不正确的。.
B:
aidl默认支持的类型包话java基本类型(int、long、boolean等)和(String、List、Map、 CharSequence),使用这些类型时不需要import声明。对于List和Map中的元素类型必须是Aidl支持的类型。如果使用自定义类型作 为参数或返回值,自定义类型必须实现Parcelable接口。所以B选项是正确的。
C:
在aidl中,因为OnBinder()方法返回的的是IBinder对象的***,并不是直接返回IBinder对象,但是我们可以做处理让我们拿到IBinder对象。
D:
接口和方法前不用加访问权限修饰符public,private,protected等,也不能用final,static。所以D选项是正确的。
总结:C的说法可能存在一定的误区,但是A的说法错误更明显。所以答案是A。
发表于 2018-11-01 23:20:58 回复(0)


  编写Aidl文件时,需要注意下面几点:


    1.接口名和aidl文件名相同。 

   

  2.接口和方法前不用加访问权限修饰符public,private,protected等,也不能用final,static。 

   

  3.Aidl默认支持的类型包话java基本类型(int、long、boolean等)和(String、List、Map、

  CharSequence),使用这些类型时不需要import声明。对于List和Map中的元素类型必须是Aidl支持的类型。如果使用自定义类型作

  为参数或返回值,自定义类型必须实现Parcelable接口。 

   

  4.自定义类型和AIDL生成的其它接口类型在aidl描述文件中,应该显式import,即便在该类和定义的包在同一个包中。 

   

  5.在aidl文件中所有非Java基本类型参数必须加上in、out、inout标记,以指明参数是输入参数、输出参数还是输入输出参数。 

    6.Java原始类型默认的标记为in,不能为其它标记。 

发表于 2018-08-27 08:44:23 回复(0)
c明显错了。是***。
发表于 2018-04-12 13:08:26 回复(0)
aidl对应的接口名称不能与aidl文件名相同,否则编译不通过

发表于 2018-01-11 00:35:55 回复(0)

编写Aidl文件时,需要注意下面几点:

  1.接口名和aidl文件名相同。

  2.接口和方法前不用加访问权限修饰符public,private,protected等,也不能用final,static。

  3.Aidl默认支持的类型包话java基本类型(int、long、boolean等)和(String、List、Map、 CharSequence),使用这些类型时不需要import声明。对于List和Map中的元素类型必须是Aidl支持的类型。如果使用自定义类型作 为参数或返回值,自定义类型必须实现Parcelable接口。

  4.自定义类型和AIDL生成的其它接口类型在aidl描述文件中,应该显式import,即便在该类和定义的包在同一个包中。

  5.在aidl文件中所有非Java基本类型参数必须加上in、out、inout标记,以指明参数是输入参数、输出参数还是输入输出参数。

  6.Java原始类型默认的标记为in,不能为其它标记
发表于 2017-10-09 16:40:08 回复(0)
Android中使用AIDL完成远程service方法调用:
aidl的文件的内容类似java代码;
创建一个Service(服务),在服务的onBind(Intent intent)方法中返回实现了aidl接口的对象;
aidl对应的接口的方法前面不能加访问权限修饰符; AIDL:Android Interface Definition Language,即Android接口定义语言。
Android 使用AIDL提供公开服务接口,使得不同进程间可以相互通信。

建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下:
(1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。
(2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。
(3)建立一个服务类(Service的子类)。
(4)实现由aidl文件生成的Java接口。
(5)在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。

发表于 2016-11-27 11:22:05 回复(0)
这题明显不止一个选项,如果是不同进程返回的是***好吗,不是对象
发表于 2016-09-12 22:41:33 回复(0)
AIDL使用步骤
1.在提供远程服务的应用中创建一个接口XXXX.java,该接口内部定义了远程服务所提供的服务(即需要远程调用的方法)
2.将1中创建的Java文件后缀名改为.aidl,应用会报错,这是只需要将.aidl文件中的权限修饰去掉。
3.定义中间人类,该类继承了Binder类并实现了2中的接口,在onBind()方法中返回中间人对象
4.将aidl文件拷贝到需要调用远程服务的应用中,注意,在拷贝时aidl文件的包名不能改变,即连同包一起拷入.
5.在调用远程服务的应用程序中得到返回的中间人对象。
发表于 2016-06-05 18:29:14 回复(0)
AIDL使用步骤
1.在提供远程服务的应用中创建一个接口XXXX.java,该接口内部定义了远程服务所提供的服务(即需要远程调用的方法)
2.将1中创建的Java文件后缀名改为.aidl,应用会报错,这是只需要将.aidl文件中的权限修饰去掉。
3.定义中间人类,该类继承了Binder类并实现了2中的接口,在onBind()方法中返回中间人对象
4.将aidl文件拷贝到需要调用远程服务的应用中,注意,在拷贝时aidl文件的包名不能改变,即连同包一起拷入.
5.在调用远程服务的应用程序中得到返回的中间人对象。


发表于 2016-04-29 09:56:39 回复(0)
C
发表于 2016-04-26 11:05:24 回复(0)
http://blog.chinaunix.net/uid-20459533-id-2979714.html
发表于 2015-11-08 22:13:00 回复(0)