问题标签 [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 投票
2 回答
36911 浏览

android - Android java binder 失败 BINDER TRANSACTION?

我正在尝试从服务下载图像并将其显示在活动中,但我不断收到

这是我的服务代码

}

压缩功能

我的活动

代码中有什么问题。活动未开始。

该应用程序没有崩溃。我只在logcat中得到这个:

我猜这可能是由于位图很大。

0 投票
1 回答
355 浏览

android - 在进程之间共享活动对象的正确方法是什么?

我正在研究在两个进程之间共享活动对象,但是有关它的文档通常乏善可陈,有时甚至不正确。

具体来说,我正在研究通过包裹共享 Binder 对象。文档指出。

活动对象

Parcel 的一个不同寻常的功能是能够读取和写入活动对象。对于这些对象,不会写入对象的实际内容,而是写入引用该对象的特殊标记。从 Parcel 中读回对象时,您不会获得该对象的新实例,而是获得一个句柄,该句柄对最初写入的完全相同的对象进行操作。有两种形式的活动对象可用。

Binder 对象是 Android 通用跨进程通信系统的核心设施。IBinder 接口描述了一个带有 Binder 对象的抽象协议。任何此类接口都可以写入 Parcel,并且在阅读时,您将收到实现该接口的原始对象或将回调通信回原始对象的特殊代理实现。使用的方法有 writeStrongBinder(IBinder)、writeStrongInterface(IInterface)、readStrongBinder()、writeBinderArray(IBinder[])、readBinderArray(IBinder[])、createBinderArray()、writeBinderList(List)、readBinderList(List)、createBinderArrayList() .

但是在收到包裹时,返回的对象只是一个BinderProxy,不能转换为原始类,也不能实现任何超出基本IBinder调用的调用。虽然这显然是文档中提到的代理对象,但我想知道引用同一语句中提到的原始对象的方法是什么。

我还想知道是否有来源可以更彻底地解释或记录该主题。

0 投票
1 回答
1102 浏览

android - Android 系统对 Binder Token 的使用

我正在这篇博文中阅读有关在 Android 系统中使用 Binder 令牌的信息。我看到了与唤醒锁相关的示例,其中令牌用于识别来自同一应用程序的后续请求。

我想问为什么在Android系统UID中,调用应用程序不足以跟踪应用程序的后续请求?在识别应用程序方面是否需要 Binder 令牌满足 UID 无法满足的要求?

0 投票
1 回答
65 浏览

android - 为什么我们使用另一个类继承 binder 类来访问 BoundServices?

我知道绑定服务仅在活动或任何组件需要它之前存在。我们必须从 onBind 函数调用 MyLocalBinder 类。为什么会这样?为什么不能直接调用呢?

0 投票
1 回答
5657 浏览

android - 使用 C++ 在 android 中理解和实现本机 Binder

我想在android中使用Binders实现一个简单的IPC机制。为此,我在互联网上搜索并找到了这个。我编译了它,它在我的 Android 设备上运行良好。我试图通过在 AOSP 上搜索每个课程来全面了解该程序,但一切都变得更加困难和混乱。任何人都可以解释一下(只是高级),也许可以添加更多评论,这样它也可以帮助一些未来的访问者。这是从那里获取的代码:

0 投票
1 回答
1649 浏览

android - 带 Messenger 或 AIDL 的快速 IPC

我正在尝试在 Android 中创建一个与远程服务快速通信的程序(约 40,000/秒),但是所有 Android IPC 似乎都无法完成这项任务。我的第一次尝试涉及一个标准的 Messenger 系统,该系统无法超过每秒约 2,000 次,同样糟糕的是,它似乎被间歇性延迟打断。

MainActivity(使用 Messenger 测试)

RemoteService(使用 Messenger 测试)

第二次尝试是用 AIDL 完成的。尽管这也为 IPC 实现了 Binder,但我认为开销要少得多。然而,事实证明,AIDL 的效率并不比 Messenger 高得多,而且它也没有解决口吃的问题。

MainActivity(使用 AIDL 测试)

远程服务(使用 AIDL 测试)

在这两种情况下,我是否做错了什么会阻止我超过约 5,000/秒?还是有我不知道的其他 Android IPC 系统?

0 投票
1 回答
1095 浏览

android - 当服务器向客户端发送消息时,android本机活页夹崩溃

我已经遭受这个错误好几天了。帮助我,如果你知道任何可能有帮助的东西。

我使用相机框架来让我的硬件工作。大多数时候,它工作正常。但是,有时活页夹会杀死我服务器的主线程,因为条件“bwr.write_consumed < mOut.dataSize()”满足如下。

当客户端调用服务器并且服务器执行某些操作时会发生这种情况,然后返回,因为需要用户输入才能完成任务。然后在所有工作完成后,服务器将向客户端发送一条消息以通知他结果。

Q1:“bwr.write_consumed < mOut.dataSize()”是否意味着binder没有得到我发送给它的所有数据?

Q2:这怎么可能?这是否意味着我的客户已关闭?

任何想法都可能会有所帮助。

谢谢


IPCThreadState.cpp::talkWithDriver()


调用栈

0 投票
2 回答
1298 浏览

android - Android:AIDL 的安全 IPC 替代方案?

我正在尝试做的事情:在设备上安装的两个应用程序之间实现轻量级、安全的 IPC 协议。客户端应用程序应该能够发送命令和查询以Service在服务应用程序中运行,并接收返回的计算结果。

应用关系:两个应用的源代码都在我的控制之下,但应用会有不同的签名(不可协商)。

安全要求:服务应用应向单个客户端提供其服务。客户端的应用程序 ID(包名称)是已知的且不变的。

我尝试了什么:我尝试使用双向Messenger通信方案实现 IPC(类似于此博客文章)。这种方法效果很好,但是我遇到了一个主要问题-我找不到获取UID客户端的方法,因此无法满足安全要求。

Service考虑在服务应用程序中找到的这段代码:

这里的想法是,当客户端应用程序向 this 发送消息时Service,它会将其本地“回调”Messenger放入replyTosent 的成员中Message。文件Messenger说明:

注意:下面的实现只是用于执行通信的 Binder 的简单包装器。

所以我认为我可以以某种方式将返回的BinderMessenger#getBinder()映射到 client's UID,但我现在遇到了麻烦:

  1. Messenger#getBinder()返回无法转换为的IBinderBinder
  2. 即使我确实设法获得了对 client's 的引用Binder,该方法Binder#getCallingUid()也是static并且不接受参数......

因此,为了使这个特定的实现安全地工作,我需要找到一种方法来根据客户端创建UID的内容Message或特定的内容来获取调用者。由于Android的Messenger安全架构是围绕.BindersBindersUIDs

额外问题:除了 AIDL,Android 上是否还有其他 IPC 技术可以满足上述要求?

0 投票
1 回答
336 浏览

android - 使用 Service 或 Binder 对象在 Service 中设置变量

我可以通过使用 binder 对象或使用服务类对象本身来设置变量 int[]。代码在public class MyActivity extends Activity.哪一个是要走的路,两者都有效:

服务 int[] 数组可以通过两种方式设置:

0 投票
0 回答
187 浏览

android - 为什么 WindowManager.LayoutParams.token 可以等于 ViewRootImpl.mWindow.asBinder?

WindowManagerGlobal.addView,有这样的说法:

我在这里很困惑。ViewRootImpl.mWindow是 的一个实例IWindow.stub,但是WindowManager.LayoutParams.token是 的一个实例IApplicationToken.stub。他们怎么可能平等?

谁能解释一下?