标签: android-binder

Android Binder示例

我在C/C++中寻找简单的绑定器IPC示例.最近我开始阅读关于Android Binder基本版(http://bharathi.posterous.com/android-binder)并且通过Android源码中的代码也开始阅读.大部分的binder使用部分都是用C++编写的.有人可以解释为什么使用C++而不是C?

android android-binder

4
推荐指数
1
解决办法
2万
查看次数

如何使用AIDL远程服务处理不同客户的并发请求?

我正在编写一个插件,该插件定义了远程服务并为第三方开发人员提供了AIDL接口。

如何使用此远程服务处理不同客户的并发请求?

正是服务apk的活动可以保持每个客户端的状态,当它们彼此切换时,该怎么做?

android parcelable aidl android-binder

4
推荐指数
2
解决办法
2197
查看次数

Android本地服务示例,bindservice()和ServiceConnection()

我有一个问题与大约一年前@mnish提出的这个问题有关.

请看看他的问题和代码.他实现了一个ServiceConnection()并将其传递给bindService().这遵循顶部附近的服务文档中的本地服务示例.

我想实现本地服务示例,所以我试图从@mnish问题/答案中添加一些细节.在ServiceConnection()中@mnish有这条线让我感到困惑:

mService = ILocService.Stub.asInterface(iservice);
Run Code Online (Sandbox Code Playgroud)

我理解@mnish编写了这段代码,但有没有人知道ILocService是什么,并且知道如何创建自己的ILocService?这个结构记录在哪里,我需要它吗?IBinder的价值来自何处?

android stub android-service android-binder

3
推荐指数
1
解决办法
2万
查看次数

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

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

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

当新客户端附加到接口或从接口分离时,有什么方法可以让服务自动收到通知吗?我找到了onBind()onUnbind(),但它们不是同一件事;他们告诉我该接口是否正在使用。onUnbind()仅当最后一个客户端分离时才会被调用。

有任何想法吗?(并且服务的设计是由外部需求控制的,无法更改......)

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

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

android android-service android-binder

3
推荐指数
1
解决办法
7169
查看次数

Android远程方法数据限制

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

android android-binder

3
推荐指数
1
解决办法
6380
查看次数

使用AIDL(Android)处理跨进程错误的推荐方法

我有一个活页夹服务和一个生活在不同进程中的客户端.使用AIDL,当客户端调用我的远程绑定器服务时,有时我需要将错误(异常)中继回客户端.

但是,根据我的理解,这是不可能的.我尝试从我的活页夹服务中抛出一个"RemoteException",看看会发生什么,我得到了

未捕获的远程异常!(进程之间尚不支持例外.)

在我的logcat中.

由于看起来这是不可能的,通知客户端错误的最佳方法是什么?我以为我可以将我的AIDL转换为使用C风格的界面,我只返回错误代码(成功时为0),但这看起来很难看.

有更好的方法吗?

java android aidl android-binder

2
推荐指数
1
解决办法
4536
查看次数

Android活页夹跟踪

在Android OS源代码(路径:)中/drivers/staging/android/binder_trace.h,我们有一个名为的文件,binder_trace.h并且也/drivers/staging/android/binder.c binder_trace包含在其中。正如我们在binder_trace.h文件中看到的,活页夹交易记录是通过TP_printk指令进行跟踪的。

现在我的问题是,如何在带有adb shell的手机中看到这些内核日志?此外,/sys/kernel/debug/tracing目录中没有任何与活页夹跟踪相关的文件!

logging android trace linux-kernel android-binder

2
推荐指数
1
解决办法
2934
查看次数

Android本地绑定

为什么我们getService在这里使用方法?

public class LocalBinder extends Binder {
    LocalService getService() {
        return LocalService.this;
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-service android-binder

2
推荐指数
1
解决办法
2680
查看次数

当Activity关闭并重新打开时,避免服务回调

我有一个LocalService,它使用一些API公开Binder.我创建了一个Service Listener,就像这样:

if (dataServiceListener == null) {
    dataServiceListener = new DataServiceListener();
    mainActivity.getApplicationContext().bindService
        (new Intent(mainActivity, LocalService.class),
        dataServiceListener.svcConn, mainActivity.BIND_AUTO_CREATE);
}
Run Code Online (Sandbox Code Playgroud)

我打电话的方法后BinderdataServiceListener公开,我得到的回应dataServiceListener onResult()方法.到目前为止,没有任何问题,一切正常.当我关闭等待Service Listener回调的Activity并立即重新打开它时,会出现某种问题.即使我再实例化dataServiceListeneronCreate(),我得到两个回调,而不是一个,老一从破坏活动,而后者(右)一个; 这样结果就会在UI上混淆.有没有办法告诉服务或服务侦听器,当活动结束时,必须避免回调.或者甚至可能破坏ServiceListener对象.

我认为这是Mark L. Murphy(Commonsware)在"繁忙的编码器Android开发指南"中描述的问题:

最大的问题是确保活动在完成后收回监听器.

我怎样才能做到这一点?有没有办法在活动结束时摆脱无用的听众?

谢谢!

android listener android-service android-binder

1
推荐指数
1
解决办法
3272
查看次数

使用绑定会破坏 RecyclerView 项目布局

我正在使用 Kotlin 构建 Android 应用程序,并决定替换对 findViewById 的调用并使用绑定。一切正常,但具体来说,当我更改 RecyclerView 的适配器时,它会破坏项目布局。

带有 findViewById 的原始代码:

class WeightListAdapter(val weights: List<WeightWithPictures>, val onWeightItemClickListener: OnWeightItemClickListener) : RecyclerView.Adapter<WeightListAdapter.WeightHolder>()  {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WeightListAdapter.WeightHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.list_item_weight, parent, false)
        return WeightHolder(view)
    }

    override fun onBindViewHolder(holder: WeightListAdapter.WeightHolder, position: Int) {
        val weightWithPictures = weights[position]
        holder.bind(weightWithPictures)
    }

    override fun getItemCount() = weights.size

    inner class WeightHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
        private lateinit var weight: Weight
        private val weightValueView: TextView = this.itemView.findViewById(R.id.weightValue)
        private val weightDateView: TextView …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-recyclerview android-binder

1
推荐指数
1
解决办法
981
查看次数

在parcel中查找binder对象

如何在android包中找到binder对象?我想编组一个有位图的包裹,但我得到了运行时异常,说包裹有绑定对象.

android marshalling parcel android-binder

0
推荐指数
1
解决办法
2395
查看次数