在我的相机应用程序中,在主UI线程上调用媒体记录器停止。 android站点上的开发人员参考,以及android摄像头参考代码似乎都做同样的事情(在主UI线程上调用stop)。
然而,在某些情况下,(SD卡速度慢,并行IO正在进行,SD卡高度分散且接近满),似乎停止需要很长时间才能返回(30-200秒)。我想这是因为作为媒体记录器的一部分发生的I / O操作停止(保存录制的视频文件)需要时间来完成。
这可能导致ANR,因为主UI线程似乎被占用的持续时间超过5秒。
我的第一直觉是将媒体记录器停止在一个单独的线程中,以便UI线程是免费的。但是,这样做可能会导致一些风险情况。如果用户退出应用程序,在保存的同时,没有确定的方法可以终止此线程(它停留在stop()上)。如果媒体记录器没有停止(并且被释放),则用户不能使用可能需要媒体记录器实例的任何其他应用程序(例如,gtalk)。进一步的android建议在onPause中释放媒体记录器,这意味着我应该在onPause中加入这个线程。如果用户按下,这将导致ANR。
对于如何最好地处理这种情况有任何建议吗?我想,必须有其他人遇到类似的情况。
答案 0 :(得分:0)
我怀疑你测量了延迟,而设备USB线仍然连接到ADT,否则stop()绝对应该在不到1秒的时间内返回。