Android 相机:线程?哪个应该做什么

2024-06-26

我试图弄清楚哪些线程应该在 Android 中执行哪些操作。

我发现官方文档中唯一说明的是camera.open()应该放入它自己的线程中。

关于什么:

  • camera.startPreview()
  • camera.stopPreview()
  • camera.release()

它没有说明它们是哪个线程need。它们必须在主线程(ui 线程)上运行吗?还是我可以自由选择?

我为什么要试图弄清楚这个问题?camera.startPreview()当在主线程上运行时导致我的应用程序在短时间内抖动/滞后,这会严重影响我的应用程序,因为它被放入 viewPager 中,并且我不希望让相机始终预览(这会导致没有滞后,但占用系统资源)。

有任何想法吗?


的文档Camera http://developer.android.com/reference/android/hardware/Camera.html声明该类不是线程安全的,应该not一次从多个线程调用(我想,除非您正在执行自己的同步)。

它表示回调将被传递到调用的线程open

来自参考文献(强调我的):

这个类不是线程安全的,旨在从一个事件线程使用。大多数长时间运行的操作(预览、聚焦、照片拍摄等)都是异步发生的,并根据需要调用回调。将在调用 open(int) 的事件线程上调用回调。决不能同时从多个线程调用此类的方法。

来自open(int)方法参考:

来自其他方法的回调将传递到调用 open() 的线程的事件循环。如果该线程没有事件循环,则回调将传递到主应用程序事件循环。如果没有主应用程序事件循环,则不会传递回调。

注意:在某些设备上,此方法可能需要很长时间才能完成。最好从工作线程(可能使用 AsyncTask)调用此方法,以避免阻塞主应用程序 UI 线程。

线程它needs是你用来打电话的人open(int).

所以回答你的问题,是的,你可以相对自由地选择,但你必须保持一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 相机:线程?哪个应该做什么 的相关文章

随机推荐