问题标签 [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.
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
接口。
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 的出现,所以我可能由于不同的空白使用而错过了一些。
android - Android - 具有应用程序生命周期的服务
我正在尝试Service
为我的应用程序创建一个协商蓝牙连接和数据的应用程序。我希望此服务的生命周期以 开始和结束Application
,但仍然能够对Activities
在此服务中发生的事件进行特定的侦听(此外,Activty
应该能够调用 的特定方法Service
来写入数据或查询连接状态)。
我首先为我的回调和服务创建 AIDL 接口,但我无法弄清楚我在做什么。
最好的方法是什么?谢谢。
编辑:需要明确的是,我的申请并不特别需要(或想要)多个流程。现在我没有超过一个;我只是使用 AIDL,因为它是我所知道的Service
与Activity
.
android - 是否可以通过 AIDL(Android 接口定义语言)远程调用另一台计算机上的方法?
我很好奇 AIDL 是仅用于同一设备上多个 Android 应用程序之间的进程间通信,还是 AIDL 提供了更广泛的功能。假设我在某个服务器上运行了一个 Java 应用程序,是否可以通过 Android 手机的 AIDL 远程调用该服务器上的方法?
如果是,我是否需要在服务器端 Java 应用程序上添加一些额外的库?
android - 何时使用基于aidl 的服务?
在什么情况下使用AIDL定义服务接口是正确的决定(而不仅仅是创建service
类的扩展)?
android - Android - 通过 AIDL 服务更新 TextView 字符串
我有一个使用 TabHost 的应用程序。几个选项卡共享一个共同的 HUD。我正在使用服务通过在准备好时调用 AIDL 函数来定期更新这些值。
但是,由于几个选项卡使用相同的 HUD,我想将这部分抽象出来。
我想过让 HUD.xml 使用 String 资源作为它的值,然后抽象类可以更新 String 资源。但是,显然 Android 无法以编程方式更新字符串资源。
我看到的唯一替代解决方案是使用 SharedPreference。每次刷新值时,我都会担心访问数据库。
谁能与我分享一些选择。
谢谢
android - 多线程服务(aidl)中的 GREF 增加/减少 - 这是什么意思?
我有一个 android 活动和一个使用aidl 实现的服务。像冠军一样工作,我有一个回调设置将一些线程通知传递回 UI,这似乎工作正常,除了很多
GREF 已增加到 101、201,301,401、501.. 等,而 GREF 已减少。我在网上做了一些搜索,发现它必须使用全局参考。
我做了一些搜索,发现大多数关于此的评论都相当陈旧。我担心的是我正在正确地实现我的客户端/服务,并且想知道如何追踪导致 GREF 增加的原因。欢迎任何想法/建议。谢谢!
基本程序流程
希望这是有道理的。我会在这里发布代码,但是在这么多不同的文件中有这么多。我想我会尝试将流程向上看是否有任何明显的东西......我唯一能看到的可能是重新使用 saxRequest() 而不是创建一个新实例......我现在实际上会尝试,但我真的很想知道 GREF 和垃圾收集的影响。
android - 在 Android 上的应用程序之间进行通信的首选方式是什么(服务与意图)
Android上应用程序之间的这两种交互方式有什么区别:
- 在应用程序 #1 中实现服务并在应用程序 #2 中使用它
- 处理意图并发布意图的答案。
交互应该是异步的。
各自的优缺点是什么?
java - 在具有多个允许签名的 Android 服务上实施签名级安全性
我目前正在开发一个包含大量个人用户信息的应用程序——比如 Facebook 联系人等……现在,我想做的一件事(并且已经完成,非常有效)使用 Android 的内置进程间通信协议 (AIDL) 向“第 3 方”应用程序开放部分应用程序。到现在为止还挺好。
问题是:因为我们涉及处理大量个人信息,所以我们必须非常小心谁可以访问它,谁不能访问它;具体来说,只有“受信任”的应用程序才能这样做。因此,执行此操作的自然方法是在我们声明服务的 AndroidManifest.xml 文件中使用自定义权限。我的问题是:我希望能够制定签名级别的保护(类似于正常的“签名”权限级别),但有一点问题:
我不仅希望使用我们的内部签名签名的应用程序能够访问这些服务。我希望能够在运行时建立一个“可信签名”列表(或者如果有更好的方法,那么也许其他时间?)能够根据这个可信密钥列表检查传入的请求。
这将以与我认为的正常“签名”权限级别相同的方式满足安全约束 - 只有“受信任的密钥列表”上的程序才能访问服务,并且密钥很难被欺骗(如果可能的话? ) - 但额外的好处是,我们不必使用我们内部团队的密钥签署每个使用 API 的应用程序。
目前在Android中这可能吗?如果有,有什么特殊要求吗?
谢谢
android - 如何在 Android 上使用 IntentService 实现回调?
如果它必须用 AIDL 实现?并请提供一个例子,谢谢。
编辑:有几种解决方案,有谁知道哪个更好?