问题标签 [android-binder]

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 投票
1 回答
670 浏览

android - Android Java 和原生进程之间有没有快速简单的 IPC 机制?

我有这样的要求。在 Android 原生服务进程中,我们会做一些事情,并以恒定的速度向 java 层发布数据,即每秒 30 次。在 App 层,我们必须接收这些数据并进行相应的操作。原生服务和App在两个不同的进程中,我们应该尽快做。

我知道活页夹可以解决我的问题,但实施起来很繁重。有什么快速简单的IPC机制可以满足我的要求吗?最好有示例代码。谢谢。

0 投票
0 回答
344 浏览

android - 在Android中是否可以强制活页夹死亡?

我有一个要发送到远程进程的 Binder,该远程进程用于linkToDeath监视 Binder 何时死亡。当进程现在崩溃时,远程进程会收到回调,但是有没有办法可以在拥有 Binder 的一侧以编程方式触发 Binder 死亡而不会崩溃?

0 投票
2 回答
1401 浏览

android - Android Bound Services:为什么我们要把这个 IBinder 实例转换成一个 IBinder 实例?

Bound Services 的开发者文档中,“创建绑定服务”中的“扩展 Binder 类”给出了以下代码示例。给出了以下代码片段(我已删除不相关的位),其中从其方法Service返回 an :IBinderonBind()

然后在我们的客户端中,我们在 的方法中接收mBinder对象(它是 的实例LocalBinder)。我的问题是,为什么我们要尝试将作为to传入的实例转换为语句中的实例onServiceConnected()ServiceConnectionLocalBinderargumentonServiceConnected()LocalBinderLocalBinder binder = (LocalBinder) service;

0 投票
1 回答
257 浏览

android - Android:为什么我们需要一个 IBinder 来让 Messenger 和 Handler 进行通信?

在本页给出的第三段代码的上下文中,有一个Messenger名为getBinder()的方法,它返回用于与IBinder关联Messenger的通信的方法。Handler

现在,当 a是对 的引用,并且两者都在同一个中创建时,为什么我们需要 aIBinderMessenger与 Handler 进行通信?MessengerHandlerclass

0 投票
2 回答
4672 浏览

android - Android系统uid为零是什么意思

在 Android 5.0 框架源代码的 NotificationManagerService.java 中。我不明白 uid 什么时候会为零。

0 投票
0 回答
488 浏览

android - AIDL 中可接受的 inout 字符串

文件指出

所有非原始参数都需要一个方向标签来指示数据的走向;和

原语默认情况下,否则不能。

然后他们继续给出一个String缺少方向标签的例子。可以Stringoutinout在 Android AIDL 中吗?

由于字符串是不可变的,我必须对处理调用的方法进行赋值才能更改字符串,例如myString = "hello to you too";. 我知道在常规方法中,此参数myString在调用方将保持不变。该行为是否适用于此处?

0 投票
1 回答
948 浏览

java - 为什么 IBinder 和 Binder 之间的类型转换不是非法的?

注意:我发现了有关使用 IBinder 和 Binder 进行类型转换的问题,但它们专注于解决问题。我的问题是首先要理解为什么演员表不是非法的。我还尝试在 BlueJ 中使用替换类进行相同的操作,但使用相同的结构,但在运行时失败。

这是包含我认为应该是非法的演员的代码。

我认为将 IBinder(服务变量)父类变量分配给 IBinder 子类的类型化变量(即 LocalService.LocalBinder 'binder' variabke),然后将 IBinder 向下转换为其子类是非法的。

换句话说,我认为在一般语法中这是非法的: Child = (Child) variableOfTypeParent; //这通过了编译器,但在运行时获得了类转换异常。

虽然我确实理解这是合法的: Child = (Child) variableOfTypeParentAssigned2Child; //但这不是这里的情况。

希望这里的高人可以给我一根骨头,或者告诉我在哪里可以阅读这种类型的选角。

编辑:这是我来自 BlueJ 的代码:

0 投票
0 回答
506 浏览

android - 没有远程服务的 Android AIDL

是否可以在不实现远程服务的情况下实现 AIDL?在对谷歌播放服务进行一些调查后,我注意到一些 AIDL 调用是通过以下方式执行的

  1. 通过以下方式获取远程上下文

    /li>
  2. 获取实现 IBinder 的类加载器和加载类

    /li>

我们可以和它交流!

我想知道为什么这是允许的,为什么另一边没有服务?整个数据在哪里?这个调用是否启动了一个新进程?

0 投票
1 回答
1729 浏览

java - Android - 调用 bindservice 但无法访问该服务中的任何方法

所以我一直在编写一个应用程序来确定你的跑步速度,并将其整合到锻炼程序中。由于我是 Android 新手,我在 Activity 中完成了所有操作,但我已经达到了我想将速度计算部分以及涉及 GPS 的所有内容转移到服务的地步,这将绑定到任何需要的锻炼它。

这是锻炼活动:

这是我所做的服务:

我已经设法缩小错误来自服务中的方法在调用时返回空值,并且我添加了一些调试行以确定 isBound 变量永远不会设置为 true,因此服务实际上没有绑定到活动,我很确定这就是我得到 NullPointerException 的原因。

任何帮助都会很棒,我似乎在我的搜索中找不到任何关于我的问题的内容。据我所知,我已经正确绑定了服务。谢谢你的时间!

0 投票
1 回答
480 浏览

android - 用户空间应用程序如何控制 Android 中的硬件(位置/网络/Wifi)?

我一直在阅读我能找到的所有内容,试图找出 Android BINDER IPC 机制背后的软件架构。据我了解,BINDER 位于内核空间中,并临时为用户空间应用程序分配共享内存,通过该内存可以在进程之间中继消息。

我开始失去控制的是实际实施的工作方式 - 特别是与包裹相关的。

我在网上查找并找到了由 Android 提供的任意服务的实现,例如 Network/Wifi/Notificaiton/Battery 等( Docs)。从我的阅读中我了解到,用户空间程序不应该实例化服务类本身,而应该获取对服务类的引用Context.getSystemService(Context.X)。因此,我认为这是一种间接的方式,即 Android已经运行了该服务,或者至少有资源在需要时启动它。实施基本上是这样安排的:

电池类

起初看起来很简单:当用户执行以下操作时:

然后user's实例会使用 BINDER 机制与system's实际的服务控制器进行通信(哪个是同一个类的实例?)。但是,上面显示的代码是系统电池监控服务的实现,那么究竟是谁在接收 BINDER 数据呢?

TL;DR:如果这一切都非常混乱,很可能是因为我试图将一千行代码压缩成 10 行,总结是:当用户打算控制硬件状态时 - 例如网络/Wifi /Location/Notifcations(触摸屏)—— Android 中实际发生了什么,谁真正控制这些抽象服务相关的硬件?

注意:以上代码完全是虚构的,仅用于显示一般结构。