Android O 以后版本Failed HIDL return status not checked: Status(EX_TRANSACTION_FAILED): 'FAILED_TRANSACT

在项目开发中遇到一个问题,使用HIDL 传输数据在多次调用获取数据时会偶现一个crash问题。对应的message如下:

Abort message: 'Status.cpp:149] Failed HIDL return status not checked: Status(EX_TRANSACTION_FAILED): 'FAILED_TRANSACTION: ''

在kernel log中找到错误信息如下:

[32m[  140.128393] [33mbinder_alloc[31m: 2413: binder_alloc_buf size 176024 failed, no address space
[32m[  140.128409] [33mbinder_alloc[31m: allocated: 704272 (num: 6 largest: 176152), free: 336112 (num: 3 largest: 175896)

binder在传输时没有可用的buffer可用。

原因,binder在传输时有概率出现传输失败。

解决办法:在调用hidl接口返回数据的同时,判断函数调用的返回值。

 

例如 Return ret =  mBinder->Func(int param1,int param2,[&](int result, const vec &data){

// do something

});

// 需要加上这个判断否则程序会被终止掉

if(!ret->isOk()) {   

return false;

}

 

为什么有概率出现传输失败还有调查清楚,有了解的大神请告知谢谢。

你可能感兴趣的:(札记)