android计时接口,接口方法和错误  |  Android 开源项目  |  Android Open Source Project...

本部分详细介绍了接口方法和错误。

Void 方法

不返回结果的方法将转换为返回 void 的 Java 方法。例如,HIDL 声明:

doThisWith(float param);

…会变为:

void doThisWith(float param);

单结果方法

返回单个结果的方法将转换为同样返回单个结果的 Java 等效方法。例如,以下方法:

doQuiteABit(int32_t a, int64_t b,

float c, double d) generates (double something);

…会变为:

double doQuiteABit(int a, long b, float c, double d);

多结果方法

对于返回多个结果的每个方法,系统都会生成一个回调类,在其 onValues 方法中提供所有结果。该回调会用作此方法的附加参数。例如,以下方法:

oneProducesTwoThings(SomeEnum x) generates (double a, double b);

…会变为:

public interface oneProducesTwoThingsCallback {

public void onValues(double a, double b);

}

void oneProducesTwoThings(byte x, oneProducesTwoThingsCallback cb);

oneProducesTwoThings() 的调用者通常使用匿名内部类或 lambda 在本地实现回调:

someInstanceOfFoo.oneProducesTwoThings(

5 /* x */,

new IFoo.oneProducesTwoThingsCallback() {

@Override

void onValues(double a, double b) {

// do something interesting with a and b.

...

}});

或:

someInstanceOfFoo.oneProducesTwoThings(5 /* x */,

(a, b) -> a > 3.0 ? f(a, b) : g(a, b)));

您还可以定义一个类以用作回调…

class MyCallback implements oneProducesTwoThingsCallback {

public void onValues(double a, double b) {

// do something interesting with a and b.

}

}

…并传递 MyCallback 的一个实例作为 oneProducesTwoThings() 的第三个参数。

传输错误和终止通知接收方

由于服务实现可以在不同的进程中运行,在某些情况下,即使实现接口的进程已终止,客户端也可以保持活动状态。调用已终止进程中托管的接口对象会失败并返回传输错误(调用的方法抛出的运行时异常)。可以通过调用 I.getService() 以请求服务的新实例,从此类失败的调用中恢复。不过,仅当崩溃的进程已重新启动且已向 servicemanager 重新注册其服务时,这种方法才有效(对 HAL 实现而言通常如此)。

接口的客户端也可以注册一个终止通知接收方,以便在服务终止时收到通知。如果调用在服务器刚终止时发出,仍然可能发生传输错误。如需在检索的 IFoo 接口上注册此类通知,客户端可执行以下操作:

foo.linkToDeath(recipient, 1481 /* cookie */);

recipient 参数必须是由 HIDL 提供的 HwBinder.DeathRecipient 接口的实现。该接口包含会在托管该接口的进程终止时调用的单个方法 serviceDied()。

final class DeathRecipient implements HwBinder.DeathRecipient {

@Override

public void serviceDied(long cookie) {

// Deal with service going away

}

}

cookie 参数包含使用 linkToDeath() 调用传递的 Cookie。您也可以在注册服务终止通知接收方后将其取消注册:

foo.unlinkToDeath(recipient);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值