gpt4 book ai didi

java - 何时调用 Parcel.recycle()?

转载 作者:行者123 更新时间:2023-12-04 23:42:36 33 4
gpt4 key购买 nike

我必须与 IBinder 合作s 和 Parcel s。我已经浏览了所有 IBinder , Binder , 和 Parcel文档,找不到任何关于何时调用 Parcel.recycle 的内容(我也从未读过任何说 parcel 必须回收的东西)。我见过像下面这样的例子:

void someMethod(IBinder binder) {
final int code = // ...
final Parcel data = Parcel.obtain()
final Parcel reply = Parcel.obtain()

try {
binder.transact(code, data, reply, 0);
} finally {
data.recycle();
reply.recycle();
}
}
但让我感到困惑的是,在每个示例中,我都会做 不是 看到这个:
class MyBinder extends Binder {
@Override
public boolean onTransact(int code, Parcel data, Parcel reply, int flags) {

try {
// do things...
} finally {
data.recycle();
// calling reply.recycle() doesn't make sense because it has to be sent
// back to the client
}

}
}
这是否意味着调用 recycle连接两端的包裹会回收吗?或者是数据和回复包裹(在 onTransact 方法中)只是在 onTransact 时在幕后回收方法退出。
如果有人确实有答案,你是从哪里找到的?是否有某种 secret 书籍或网站记录了这一点?我在 https://developer.android.com 上的任何地方都找不到它
理想情况下,我想做的是从 onTransact 获取数据包。并将其传递给线程池内的任务。但是因为我不知道包裹何时(或是否)被回收,所以我不知道何时(或是否)我可以使用数据包裹。

最佳答案

in every example, I do NOT see this


这是意料之中的。这将是 onTransact() 的调用者的责任回收其 Parcel .毕竟, onTransact()不知道调用者是否打算重用 Parcel实例。

Does this mean that calling recycle will recycle the parcel on both the ends of the connection?


AFAIK,不。

Or are the data and reply parcels (in the onTransact method) just recycled behind the scenes when onTransact method exits.


是的。

And if someone does have the answer, where did you find it out from?


我查看了 Binder的源代码, 其中 onTransact() is being called . finally block 回收 Parcel实例。

Ideally what I would like to do is get the data parcel from onTransact and pass it into a task inside of a thread pool. But because I don't know when (or if) the parcel gets recycled, I don't know when (or if) I can use the data parcel.


由于 Parcel被回收了,那是不安全的。您将希望从中获取数据 Parcel并将其放入您放入线程池的其他内容中。

关于java - 何时调用 Parcel.recycle()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72081421/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com