2

在我的相机应用程序中,媒体记录器停止在主 UI 线程上调用。android 站点上的开发人员参考以及 android 相机参考代码似乎都在做同样的事情(在主 UI 线程上调用 stop)。

但是在某些情况下,(SD卡很慢,并行IO正在进行,SD卡高度碎片并接近满),似乎停止需要很长时间才能返回(30-200秒)。我想这是因为作为媒体记录器停止的一部分发生的 I/O 操作(以保存录制的视频文件)需要时间来完成。

这可能会导致 ANR,因为主 UI 线程似乎被占用了超过 5 秒的持续时间。

我的第一个直觉是将媒体记录器停止在一个单独的线程中,以便 UI 线程是空闲的。但是,这样做可能会导致一些危险的情况。如果用户在保存过程中退出应用程序,则无法确定杀死该线程(卡在 stop() 上)。如果媒体记录器没有停止(并释放),用户将无法使用可能需要媒体记录器实例的任何其他应用程序(例如 gtalk)。进一步的 android 建议在 onPause 中发布媒体记录器,这意味着我应该在 onPause 中加入这个线程。如果用户按下返回,这将导致 ANR。

关于如何最好地处理这种情况有什么建议吗?我想,一定还有其他人遇到过类似的情况。

4

1 回答 1

0

我怀疑您在设备 USB 电缆仍连接到 ADT 时测量了延迟,否则 stop() 肯定会在 1 秒内返回。

于 2013-12-11T01:11:50.113 回答