【发布时间】:2013-05-02 19:36:06
【问题描述】:
我从需要修改的应用程序中继承了一些代码(糟糕)。有问题的活动实现了 SurfaceHolder.Callback 和 SensorEventListener。此活动适用于自定义相机。
代码可以很好地自动对焦和拍照。拍完照片后,我开始另一个活动以裁剪图像。一旦启动该活动,就会调用 surfaceDestroyed 的 SurfaceHolder.Callback(如预期的那样)。此时现有应用程序释放相机(如预期的那样)。但是,当新的裁剪活动启动时,原来的相机活动会停止(堆栈跟踪:Instrumentation.callActivityOnStop->Activity.performStop)。
编辑:调用我的活动的 onStop 时完成堆栈跟踪:
CameraActivity.onStop() line: 784
Instrumentation.callActivityOnStop(Activity) line: 1219
CameraActivity(Activity).performStop() line: 5186
ActivityThread.performStopActivityInner(ActivityThread$ActivityClientRecord, ActivityThread$StopInfo, boolean, boolean) line: 3003
ActivityThread.handleStopActivity(IBinder, boolean, int) line: 3052
ActivityThread.access$1000(ActivityThread, IBinder, boolean, int) line: 139
ActivityThread$H.handleMessage(Message) line: 1251
ActivityThread$H(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 137
ActivityThread.main(String[]) line: 4918
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 511
ZygoteInit$MethodAndArgsCaller.run() line: 1004
ZygoteInit.main(String[]) line: 771
NativeStart.main(String[]) line: not available [native method]
因此,相机活动不再处于活动状态,并且它不会从裁剪活动中接收结果。
为什么破坏表面/释放相机会导致相机活动停止?我一定是在这里遗漏了什么......
【问题讨论】:
-
您能出示您的相机活动代码吗?
-
它很大而且很笨拙(大约 900 行)。而且由于我没有写它,我不确定是否可以出于法律原因将整个内容放在那里。但是,如果有一些有用的部分,我可以提出(也许是 SurfaceHolder.callback 方法?)。
-
在
onStop()中放置一个断点并找出调用它的原因。 -
我做到了。这是我上面的注释:Instrumentation.callActivityOnStop->Activity.performStop。我现在确实使用完整的堆栈跟踪更新了原始问题。
标签: android android-activity android-camera surfaceview surfaceholder