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

我试图找出哪些线程应该在Android中做什么。

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

关于什么:

  • camera.startPreview()
  • camera.stopPreview()
  • camera.release()
  • 它没有说明他们需要哪个线程。 它们必须在主线程(ui线程)上运行吗? 或者我可以自由选择?

    我为什么要弄清楚这一点? 在主线程上运行时, camera.startPreview()会导致我的应用程序在短时间内抖动/滞后,这会严重影响我的应用程序,因为它放在viewPager中,我不希望相机总是预览(这不会造成延迟,但会占用系统资源)。

    有任何想法吗?


    Camera的文档声明该类不是线程安全的,不应该一次从多个线程中调用(我想,除非你正在执行自己的同步)。

    它表示回调将传递给open电话的线程

    从参考(重点是我的):

    这个类不是线程安全的, 并且意味着从一个事件线程使用 。 大多数长时间运行的操作(预览,焦点,照片捕捉等)都是异步发生的,并根据需要调用回调。 回调将在事件线程open(int)被调用时调用。 绝不能一次从多个线程调用这个类的方法。

    open(int)方法引用:

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

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

    它需要的线程是你用来调用open(int)的线程。

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

    链接地址: http://www.djcxy.com/p/26129.html

    上一篇: Android camera: Threads? Which should do what

    下一篇: Hide keyboard when down arrow is pressed