我正在开发一种手电筒应用程序,其中一个活动中有一个普通的手电筒,一个活动中有一个闪光灯。现在我正在onCreate of Flashlight活动中获取相机。但是当我想要频闪活动时,我需要释放FlashLight活动所获得的相机。我不想在onPause of FlashLight活动中释放相机,因为即使用户按下主页按钮也会停止相机。我只想在用户进行频闪活动时释放相机,否则他会通过后退按钮退出应用程序。此外,如果用户从频闪活动回到手电筒活动,我想重新获取相机。无论如何他们都是这样做的。?
答案 0 :(得分:7)
其他答案告诉你不要这样做以及为什么。但要回答你的问题:
在静态成员变量中保留对Camera
实例的引用,最好是在单独的类中,如下所示:
public class Globals {
public static Camera myCamera;
}
此变量可用作Globals.myCamera
的所有活动。
将您从调用Camera
获得的Camera.open()
实例放入Globals.myCamera
。这将适用于这两项活动。当您准备好释放相机时,请致电Globals.myCamera.release()
,然后将Globals.myCamera
设置为null
,表示您无法再控制相机。
答案 1 :(得分:1)
I want to release the camera only when user goes to strobe activity or else he exits the app by back button.
如果您未尽快释放相机资源,则用户将无法使用任何其他应用程序中的相机。例如,如果您的应用程序的用户按下主页按钮,相机对象将被您的应用程序锁定。这将导致麻烦的行为:例如,用户无法启动相机应用程序。
如official docs所示:
重要:调用release()以释放相机以供其他应用程序使用。应用程序应立即在onPause()
中释放相机 I want to release the camera only when user goes to strobe activity or else he exits the app by back button
如果您没有手动release相机资源,他们将不会被释放只需按下后退按钮并“退出”您的应用。
Also I want to reacquire the camera if the user is coming back to flashlight activity from strobe activity. Is their anyway to do this.?
只需连接onResume()中的相机,然后释放onPause()中的资源。
答案 2 :(得分:0)
我不会要求你停止做你想做的事情或告诉你有关官方建议的事。
您可以通过使用单独的类来使用Camera来实现该功能,并将其所有功能和成员声明为静态。
onDestroy()
中执行相同的操作,但如果您切换到Strobe活动时finish()
FlashLight活动,那么您不需要执行上述步骤并且您的工作将仅通过此步骤完成。答案 3 :(得分:0)
最好的解释是David Wasser给出的。我们可以创建相机的全局实例,然后在需要的地方使用它。
public class Globals { public static Camera myCamera; }
虽然另一种解决方法是创建按钮以移动到每种类型的灯光,每个灯光都有不同的类别。在这种情况下,我们可以暂停相机上的暂停,因此它不会在按下主页按钮时关闭相机,但是一旦用户进入包含选择相机的按钮的活动,我们就可以释放相机轻型。所以相机在选择时总是免费的。