変更が必要なアプリケーションからいくつかのコードを継承しました (yuck)。問題のアクティビティは、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]
このため、カメラ アクティビティはアクティブではなくなり、トリミング アクティビティからの結果を受け取りません。
サーフェスを破壊する/カメラを解放すると、カメラ アクティビティが停止するのはなぜですか? ここで何かが欠けているに違いない...