我从需要修改的应用程序中继承了一些代码(恶心)。有问题的活动实现了 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]
因此,相机活动不再处于活动状态,并且它不会接收来自裁剪活动的结果。
为什么破坏表面/释放相机会导致相机活动停止?我一定在这里遗漏了一些东西......