繁体   English   中英

已经开始在AsyncTask之间交换对象(或消息)

[英]Exchange of objects (or message) between AsyncTasks already started

我有三个AsyncTask:第一个捕获图像帧(每秒超过一个)Mat类型,并将其传递给第二个AsyncTask。 第二个处理帧,如果有必要,它应该传达第三个AsyncTask来拍照。

我如何管理已经开始的AsyncTasks之间的通信我的想法是使用静态对象,但它似乎不是一个“优雅”的解决方案。

PS:如果它们与对象进行通信会更好,但是我也接受有关如何传递简单消息的提示。

谢谢

您的方法存在几个可能难以解决的问题:

1)Mat对象在内存和分配时间方面非常昂贵,因此,如果您每秒捕获多个帧并将它们保存在内存中,而AsyncTask运行,则可能会出现OutOfMemory异常;

2)在某些Android版本上,所有AsyncTasks都在同一线程上运行,这意味着它们实际上将按顺序工作。 在最佳情况下,有一个线程池用于运行AsyncTasks,这意味着您将有数量有限的正在运行的任务。

我建议您在onCameraFrame(CvCameraViewFrame inputFrame)内进行所有处理。 但是我想您已经尝试过了,处理时间很大,无法显示具有足够FPS的预览。

要严格回答您的问题,您可以将事件总线通信系统用于AsyncTasks。 我使用过Otto,并且安装起来非常容易,并且有很多示例( http://square.github.io/otto/ )。 这是使用Otto的一个很好的例子( http://simonvt.net/2014/04/17/asynctask-is-bad-and-you-should-feel-bad/ )。 只需确保为每个任务响应创建一个单独的类文件,否则您将获得使用彼此消息的任务。

但是,如果您想继续使用该方法,建议您使用线程和互通。 周围有很多简单的例子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM