问题标签 [aidl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
7817 浏览

java - Android .aidl 中的 oneway 声明是否保证将在单独的线程中调用该方法?

我正在为 Android 手机的客户端/服务器应用程序设计一个框架。我对 Java 和 Android 都很陌生(但对一般编程或特别是线程编程并不陌生)。

有时我的服务器和客户端会在同一个进程中,有时它们会在不同的进程中,具体取决于具体的用例。客户端和服务器接口如下所示:

IServer.aidl:

IClient.aidl:

现在这里是有趣的地方。我可以预见客户端调用的用例,IServer.doSomething()然后调用IClient.reportBack(),并根据报告回来的内容,IClient.reportBack()需要再次调用IClient.doSomething().

这里的问题是,IServer.doSomething()一般来说,它不会是可重入的。没关系,只要IClient.reportBack()总是在新线程中调用。在这种情况下,我可以确保 的实现IServer.doSomething()总是synchronized适当的,以便来自新线程的调用阻塞,直到第一个调用返回。

如果一切都按照我认为的方式运行,那么通过将 IClient 接口声明为oneway,我保证会如此。至少,我想不出任何方式来调用IServer.doSomething()toIClient.reportBack()可以立即返回(oneway应该确保什么),但IClient.reportBack仍然能够IServer.doSomething在同一个线程中递归地重新调用。要么必须启动 IServer 中的新线程,要么旧的 IServer 线程可以重新用于对 IServer.doSomething() 的内部调用,但只有在外部调用IServer.doSomething()返回之后。

所以我的问题是,一切都按照我的想法进行吗?Android 文档几乎没有提到oneway接口。

0 投票
3 回答
36909 浏览

android - Android RemoteExceptions 和服务

所以我为 Android 操作系统编写了一个服务和一个活动。

我的服务在它自己的进程中运行,所以我的活动和服务之间的所有通信都是通过 IPC 进行的。为此,我使用标准的 Android .aidl 机制。

到目前为止一切正常。但是,AIDL 使用“throws RemoteException”生成所有方法存根,所以我必须处理它们。

我对整个 Android 源代码进行了快速 grep,只发现了三个抛出此异常的情况。这些在我没有联系的不同服务中。

我也检查了 C 源代码,因为理论上 RemoteExceptions 可以使用 JNI 接口生成。没有出现。

我的印象是每个人都只是这样处理它们:

这不是可靠的代码,我不希望在我的代码库中有这样的东西。

除此之外:我自己尝试通过 IPC 抛出 RemoteException,我得到的只是一个堆栈跟踪和一条系统日志消息,告诉我还不支持异常。我的应用程序从未看到异常,并且引发异常的服务最终处于非常奇怪的状态(中途工作):-(

问题是:

  • 这些异常会被抛出吗?

  • 有没有人见过这样的 try-catch 块捕获 RemoteException?

  • 难道它们不存在,我们只是被迫处理它们,因为“抛出 RemoteException”是死代码或 AIDL 编译器内的遗留代码?

Disclamer:我还没有阅读完整的源代码。我使用 Grep 来查找 RemoteException 的出现,所以我可能由于不同的空白使用而错过了一些。

0 投票
1 回答
2104 浏览

android - Android - 具有应用程序生命周期的服务

我正在尝试Service为我的应用程序创建一个协商蓝牙连接和数据的应用程序。我希望此服务的生命周期以 开始和结束Application,但仍然能够对Activities在此服务中发生的事件进行特定的侦听(此外,Activty应该能够调用 的特定方法Service来写入数据或查询连接状态)。

我首先为我的回调和服务创建 AIDL 接口,但我无法弄清楚我在做什么。

最好的方法是什么?谢谢。

编辑:需要明确的是,我的申请并不特别需要(或想要)多个流程。现在我没有超过一个;我只是使用 AIDL,因为它是我所知道ServiceActivity.

0 投票
1 回答
382 浏览

android - 是否可以通过 AIDL(Android 接口定义语言)远程调用另一台计算机上的方法?

我很好奇 AIDL 是仅用于同一设备上多个 Android 应用程序之间的进程间通信,还是 AIDL 提供了更广泛的功能。假设我在某个服务器上运行了一个 Java 应用程序,是否可以通过 Android 手机的 AIDL 远程调用该服务器上的方法?

如果是,我是否需要在服务器端 Java 应用程序上添加一些额外的库?

0 投票
4 回答
8683 浏览

android - 何时使用基于aidl 的服务?

在什么情况下使用AIDL定义服务接口是正确的决定(而不仅仅是创建service类的扩展)?

0 投票
1 回答
644 浏览

android - Android - 通过 AIDL 服务更新 TextView 字符串

我有一个使用 TabHost 的应用程序。几个选项卡共享一个共同的 HUD。我正在使用服务通过在准备好时调用 AIDL 函数来定期更新这些值。

但是,由于几个选项卡使用相同的 HUD,我想将这部分抽象出来。

我想过让 HUD.xml 使用 String 资源作为它的值,然后抽象类可以更新 String 资源。但是,显然 Android 无法以编程方式更新字符串资源。

我看到的唯一替代解决方案是使用 SharedPreference。每次刷新值时,我都会担心访问数据库。

谁能与我分享一些选择。

谢谢

0 投票
1 回答
5989 浏览

android - 多线程服务(aidl)中的 GREF 增加/减少 - 这是什么意思?

我有一个 android 活动和一个使用aidl 实现的服务。像冠军一样工作,我有一个回调设置将一些线程通知传递回 UI,这似乎工作正常,除了很多

GREF 已增加到 101、201,301,401、501.. 等,而 GREF 已减少。我在网上做了一些搜索,发现它必须使用全局参考。

我做了一些搜索,发现大多数关于此的评论都相当陈旧。我担心的是我正在正确地实现我的客户端/服务,并且想知道如何追踪导致 GREF 增加的原因。欢迎任何想法/建议。谢谢!

基本程序流程

希望这是有道理的。我会在这里发布代码,但是在这么多不同的文件中有这么多。我想我会尝试将流程向上看是否有任何明显的东西......我唯一能看到的可能是重新使用 saxRequest() 而不是创建一个新实例......我现在实际上会尝试,但我真的很想知道 GREF 和垃圾收集的影响。

0 投票
1 回答
2081 浏览

android - 在 Android 上的应用程序之间进行通信的首选方式是什么(服务与意图)

Android上应用程序之间的这两种交互方式有什么区别:

  1. 在应用程序 #1 中实现服务并在应用程序 #2 中使用它
  2. 处理意图并发布意图的答案。

交互应该是异步的。

各自的优缺点是什么?

0 投票
2 回答
5289 浏览

java - 在具有多个允许签名的 Android 服务上实施签名级安全性

我目前正在开发一个包含大量个人用户信息的应用程序——比如 Facebook 联系人等……现在,我想做的一件事(并且已经完成,非常有效)使用 Android 的内置进程间通信协议 (AIDL) 向“第 3 方”应用程序开放部分应用程序。到现在为止还挺好。

问题是:因为我们涉及处理大量个人信息,所以我们必须非常小心谁可以访问它,谁不能访问它;具体来说,只有“受信任”的应用程序才能这样做。因此,执行此操作的自然方法是在我们声明服务的 AndroidManifest.xml 文件中使用自定义权限。我的问题是:我希望能够制定签名级别的保护(类似于正常的“签名”权限级别),但有一点问题:

不仅希望使用我们的内部签名签名的应用程序能够访问这些服务。我希望能够在运行时建立一个“可信签名”列表(或者如果有更好的方法,那么也许其他时间?)能够根据这个可信密钥列表检查传入的请求。

这将以与我认为的正常“签名”权限级别相同的方式满足安全约束 - 只有“受信任的密钥列表”上的程序才能访问服务,并且密钥很难被欺骗(如果可能的话? ) - 但额外的好处是,我们不必使用我们内部团队的密钥签署每个使用 API 的应用程序。

目前在Android中这可能吗?如果有,有什么特殊要求吗?

谢谢

0 投票
2 回答
8341 浏览

android - 如何在 Android 上使用 IntentService 实现回调?

如果它必须用 AIDL 实现?并请提供一个例子,谢谢。

编辑:有几种解决方案,有谁知道哪个更好?