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

android - 在 Android 中使用 Binder for IPC 的优势

在 Android 堆栈中使用 Binder for IPC 优于(信号量、消息队列、PIPES)有什么优势?

0 投票
1 回答
2713 浏览

android - onBind 和服务连接?

绑定到远程服务后似乎有一点延迟。onServiceConnection 工作正常。绑定工作正常。我认为只是延迟问题。例如,在我的活动的 onCreate() 方法中,例如说:

  • 请注意 mConnection onServiceConnect() 正确设置了 mRemoteServiceStub。

    bindService(mIntent, mConnection, Context.BIND_AUTO_CREATE); mRemoteServiceStub.doThis();

如果我运行它,我会收到一个错误,指出尚不存在连接。但是,如果我将 mRemoteServiceStub.doThis() 放在 onClickListener 的方法中,它会完美运行。因此,要么在 onCreate 活动完成运行之前不建立连接,要么建立连接存在延迟。

有人知道吗?

有没有办法延迟应用程序运行,直到建立连接,这样我就可以立即使用连接而无需触发。(我的实现是正确的)

0 投票
3 回答
5019 浏览

android - 小部件更新失败的活页夹事务

我正在像这样更新小部件中的一个位图(整个小部件只有一个 ImageView)

在一些罕见的情况下(在每天使用的 6 个月中发生 3 次)我得到“!!! BINDER TRANSACTION 失败!!!”。那么,只有手机重启才能解决这个问题。再次卸载并安装,没有帮助,只能重新启动。

我检查了图标的大小,它只有 56 KB,所以它符合 IPC 内存限制。当我删除 setImageViewBitmap(...) 小部件再次工作,但位图没有更新。所以问题出在位图本身。当bitmal这么小时,什么可能导致这个活页夹交易失败?

现在,我通过将图标保存到 /data 来解决这个问题,并且我只将 URI 发送到小部件。但我想知道,当我显然没有达到 IPC 内存限制时,哪里会出现问题?

编辑:我忘了提,它发生在 android 2.3.5 和 2.3.7

0 投票
2 回答
5072 浏览

android - 当客户端附加和分离到 Android 服务时收到通知

我有一个通过 AIDL 导出 RPC 接口的 Android 服务。该接口是面向连接的,客户端将连接到它,与它进行交易,然后在退出时断开连接。

不幸的是客户端异常退出,例如被系统杀死,它永远没有机会告诉RPC接口连接已经关闭。这导致了问题。

当新客户端从接口附加和分离时,服务有什么方法可以自动得到通知?我找到了onBind()and onUnbind(),但它们不是一回事;他们告诉我接​​口是否在使用中。onUnbind()仅在最后一个客户端分离时才被调用。

有任何想法吗?(而且服务的设计受外部需求控制,无法更改……)

更新:我完全忘了提到我已经看过了linkToDeath(),它几乎完全符合我的要求,但它似乎只能以相反的方式工作——它允许客户端在服务终止时得到通知。当我尝试它时,似乎什么也没发生。文档有点零散;任何人都知道这是否按我想要的方式工作?如果是这样,如何让它告诉我哪个客户死了?

更新更新:我已经解决了这个问题,但只是作弊。我重新定义了它。我的应用程序实际上主要是使用 NDK 用 C 语言编写的,因此服务的设计很奇怪;因此,我将问题转移到 C 世界并创建了一个小型辅助进程,它使用 Unix 域套接字直接与我的应用程序的本机部分对话。它速度快,非常小,几乎是防弹的——但它仍然在作弊。所以虽然我的问题现在已经解决了,但我仍然想知道实际的答案是什么。

0 投票
2 回答
3338 浏览

android - Binder 防止垃圾收集

我想我找到了内存泄漏,并想确认我认为 Android 的 Binder 是如何实现的。在这种情况下,我有一个服务和一个活动,每个都在自己的进程中。我创建了一个 AIDL,它允许我通过 ipc 方法将回调对象从 Activity 传递给服务,然后在服务完成请求的任务时调​​用回调。

很长一段时间我都在想:如果我将一个新的回调对象传递给服务并且我没有在我的活动中保留指向回调对象的指针,为什么垃圾收集器不继续在我的活动中收集回调过程?由于这似乎没有发生,JVM 如何知道何时在我的 Activity 中对回调进行垃圾收集。

我想答案是,Binder系统在Activity进程中保存了指向我的Callback的指针,直到Service进程中对应的Callback对象调用了它的finalize()方法,然后再向Activity发送消息释放指针。它是否正确?如果不是,它是如何工作的?

我相信它会导致有趣的情况,如果 Activity 中的回调指向内存密集型的东西,直到收集到服务中的回调才会被收集。如果 Service 的内存不低,它可能很长时间都不会收集回调,并且回调可能只是在 Activity 中建立,直到 Activity 中出现 OutOfMemoryError。

0 投票
1 回答
714 浏览

android - Android活页夹生成器失败

我已经用我的界面定义了一个 AIDL 文件。像这样的东西:

Eclipse 会自动在 gen 文件夹中生成 IResplugin.java,但它做错了。这是 Eclipse 生成的代码:

该行_result = _replu.readHashMap(cl)崩溃,因为该cl对象不存在。如果我手动添加这一行(缺少类加载器),Eclipse 会将我的版本替换为自己生成的版本(同样是错误的)。

有任何想法吗?

0 投票
2 回答
7256 浏览

android - Android远程方法数据限制

对于我的应用程序,我需要在我的活动和服务之间传递数据,这两者都在不同的进程中。我知道 Google 建议在将意图发送到最低限度(不是全尺寸位图)时保持数据传递。当您通过 AIDL 与服务通信并希望通过远程方法调用传递数据时,是否适用类似的策略?

0 投票
1 回答
13203 浏览

android - Android:bindService() 出现问题 -> 服务为空

我在将服务绑定到活动时遇到问题。我得到play_service == null。我找不到我做错了什么。为什么play_service为空?

我的活动类:

播放服务类:

0 投票
5 回答
5168 浏览

android - 如何收听 dev/binder?

Androiddev/binder也是为层级通信负责的。可以收听消息吗?我知道它们必须被解码,但是我怎样才能得到这些消息。例如,如果一个应用程序发送一条消息成为一个地理位置。我的安卓设备上也有根。

0 投票
5 回答
10622 浏览

android - 远程服务如何向绑定的 Activity 发送消息?

我已阅读有关 Bound Services 的文档,其中显示您可以通过Messages从 Activity 轻松地与远程(即不在同一上下文中)Service 进行通信,但是有什么方法可以将消息从Service发送到绑定活动?例如,我的活动绑定到同一应用程序的正在运行的后台服务,向它发送一条消息,并在收到此消息后,服务回复一条消息给活动。我该如何实现呢?您能否指出一些解释该主题的文档?