代码:
viewModel.saveLayer.observeNonNull(this) { Log.i(TAG, "save layer") try { // starting to record takes longer than stopping. so, if timed right, a recorder could be stopped // before started. with(mediaRecorder) { stop() reset() } sharedPrefs.updateNumSavedLayers(it) viewModel.updateNumSavedLayers(it) } catch(e: Exception) { Log.e(TAG,"could not save layer", e) } }
崩溃仍然引发。参见下文:
2019-02-20 19:45:22.514 22435-22435 / com.xxx.xxx E / PedalApp:无法保存图层 java.lang.RuntimeException:停止失败。 在android.media.MediaRecorder.stop(本机方法) 在com.androidchekhov.looperpedal.PedalActivity $ onCreate $ 6.invoke(PedalActivity.kt:92) 在com.androidchekhov.looperpedal.PedalActivity $ onCreate $ 6.invoke(PedalActivity.kt:17) 在com.androidchekhov.looperpedal.ExtensionsKt $ observeNonNull $ 1.onChanged(Extensions.kt:9) 在android.arch.lifecycle.LiveData.considerNotify(LiveData.java:109) 在android.arch.lifecycle.LiveData.dispatchingValue(LiveData.java:126) 在android.arch.lifecycle.LiveData.setValue(LiveData.java:282) 在android.arch.lifecycle.MutableLiveData.setValue(MutableLiveData.java:33) 在com.xxx.xxx.PedalViewModel.pedalClick(PedalViewModel.kt:47) 在com.androidchekhov.looperpedal.PedalActivity $ onCreate $ 11.invoke(PedalActivity.kt:137) 在com.androidchekhov.looperpedal.PedalActivity $ onCreate $ 11.invoke(PedalActivity.kt:17) 在com.androidchekhov.looperpedal.OnPedalTouchListener.handleClick(OnPedalListener.kt:80) 在com.androidchekhov.looperpedal.OnPedalTouchListener.onTouch(OnPedalListener.kt:41) 在android.view.View.dispatchTouchEvent(View.java:11775) 在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2971) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2600) 在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2971) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2600) 在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2971) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2600) 在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2971) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2600) 在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2971) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2600) 在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2971) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2600) 在com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:448) 在com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1834) 在android.app.Activity.dispatchTouchEvent(Activity.java:3312) 在android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69) 在com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:410) 在android.view.View.dispatchPointerEvent(View.java:12018) 在android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4829) 在android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:4643) 在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:4181) 在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:4234) 在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:4200) 在android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:4327) 在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:4208) 在android.view.ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java:4384) 在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:4181) 在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:4234) 在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:4200) 在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:4208) 在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:4181) 在android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6755) 在android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6694) 在android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6655) 在android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6858) 在android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:193 在android.os.MessageQueue.nativePollOnce(本机方法)
答案 0 :(得分:1)
不确定我是否误解了您的问题,但以下行表明您看到的异常是由您自己的代码打印的:
Log.e(TAG,"could not save layer", e)
如果您为Log.e
命令提供了例外,则该例外会显示在您的消息旁边(请参见documentation):
Send a ERROR log message and log the exception.
请注意,还会显示您的消息“无法保存图层”。因此,您只看到打印的堆栈跟踪,但是正确捕获了异常,因此 not 不会使您的应用程序崩溃。也许是后续问题导致了崩溃。
请(1)在应用程序上提供更多上下文,以及(2)检查您是否可以共享其他崩溃指示器,例如logcat。根据您提供的信息,我认为还会发生另一次崩溃,实际上会导致该应用程序崩溃。