gpt4 book ai didi

android - 我是否应该使用 AIDL?

转载 作者:太空狗 更新时间:2023-10-29 13:11:03 25 4
gpt4 key购买 nike

在我们可以使用java接口(interface)帮助客户端应用程序调用绑定(bind)服务的同时,使用AIDL有什么优势?

例如,对于ITestService,我们应该创建一个AIDL,如下所示:

// ITestService.aidl
package com.varanegar.vaslibrary.service;

// Declare any non-default types here with import statements

interface ITestService {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
int test();
}

然后我们应该实现生成的Stub类:

public class TestService extends Service {
public class TestImpl extends ITestService.Stub{

@Override
public void basicTypes(int anInt, long aLong, boolean aBoolean,
float aFloat, double aDouble, String aString) throws RemoteException {

}

@Override
public int test() throws RemoteException {
return 0;
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new TestImpl();
}
}

不过,我相信我们可以很容易地创建一个像这样的 java 接口(interface):

interface ITestService {
int test();
}

然后创建实现该接口(interface)的服务:

public class TestService extends Service implements ITestService {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

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

根据维基百科:

AIDL: Java-based, for Android; supports local and remote procedure calls, can be accessed from native applications by calling through Java Native Interface (JNI)

还有其他令人信服的理由来使用 AIDL 而不是普通的 java 服务吗?

在我看来,我可以在没有任何 AIDL 的情况下使用绑定(bind)和启动的服务。因为这可以在 android 库中编写 java 接口(interface)作为服务器和所有客户端应用程序之间的契约。

我不打算创建 native 应用程序。因此,如果 AIDL 用于将 Java 服务公开给 native 应用程序,那么在我的情况下使用它是否正确?我对吗?如果我误解了 AIDL,请纠正我。

提前致谢

最佳答案

来自documentation :

Using AIDL is necessary only if you allow clients from different applications to access your service for IPC and want to handle multithreading in your service. If you do not need to perform concurrent IPC across different applications, you should create your interface by implementing a Binder or, if you want to perform IPC, but do not need to handle multithreading, implement your interface using a Messenger. Regardless, be sure that you understand Bound Services before implementing an AIDL.

关于android - 我是否应该使用 AIDL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40994800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com