【问题标题】:Xamarin Forms PopAsync crashXamarin 窗体 PopAsync 崩溃
【发布时间】:2016-11-03 09:04:18
【问题描述】:

我已经使用 PCL 构建了一个 Xamarin 表单应用程序。

应用程序有时会在 await Navigation.PopAsync(); 上崩溃 我找到了这个https://forums.xamarin.com/discussion/62414/app-resuming-results-in-crash-with-formsappcompatactivity,但它没有帮助

它只出现在 android 5.0 及更高版本上。我正在使用 Xamarin.Forms 2.3.3

这是崩溃日志:

Xamarin caused by: android.runtime.JavaProxyThrowable: System.AggregateException: A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread. ---> System.AggregateException: One or more errors occurred. ---> Java.Lang.RuntimeException: Can not perform this action after onSaveInstanceState
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at Java.Interop.JniEnvironment+InstanceMethods.CallIntMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method) [0x00084] in <bd356ef77b9a4127a500b8385b303c4b>:0 
  at Android.Runtime.JNIEnv.CallIntMethod (System.IntPtr jobject, System.IntPtr jmethod) [0x0000e] in <bc38a7e9ac144e5b8f3cbfa1d1cb295b>:0 
  at Android.Support.V4.App.FragmentTransactionInvoker.Commit () [0x00033] in <27c17fe440cf491ba8255bcefade6e02>:0 
  at Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.SwitchContentAsync (Xamarin.Forms.Page view, System.Boolean animated, System.Boolean removed, System.Boolean popToRoot) [0x0014b] in <651b788f2205433c9db3a98957b5b8aa>:0 
  at Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.OnPopViewAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00021] in <651b788f2205433c9db3a98957b5b8aa>:0 
  at Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.PopViewAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00000] in <651b788f2205433c9db3a98957b5b8aa>:0 
  at Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.OnPopped (System.Object sender, Xamarin.Forms.Internals.NavigationRequestedEventArgs e) [0x0000e] in <651b788f2205433c9db3a98957b5b8aa>:0 
  at Xamarin.Forms.NavigationPage+<Xamarin-Forms-INavigationPageController-PopAsyncInner>d__63.MoveNext () [0x0006e] in <83d3340f3b274d389854ce45f51043f6>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at Xamarin.Forms.NavigationPage+<PopAsync>d__38.MoveNext () [0x001b9] in <83d3340f3b274d389854ce45f51043f6>:0 
   --- End of inner exception stack trace ---
  at Xamarin.Forms.NavigationPage+<>c.<SafePop>b__93_0 (System.Threading.Tasks.Task`1[TResult] t) [0x0000e] in <83d3340f3b274d389854ce45f51043f6>:0 
  at System.Threading.Tasks.ContinuationTaskFromResultTask`1[TAntecedentResult].InnerInvoke () [0x00027] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Threading.Tasks.Task.Execute () [0x00016] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
   --- End of inner exception stack trace ---
---> (Inner Exception #0) System.AggregateException: One or more errors occurred. ---> Java.Lang.RuntimeException: Can not perform this action after onSaveInstanceState
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at Java.Interop.JniEnvironment+InstanceMethods.CallIntMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method) [0x00084] in <bd356ef77b9a4127a500b8385b303c4b>:0 
  at Android.Runtime.JNIEnv.CallIntMethod (System.IntPtr jobject, System.IntPtr jmethod) [0x0000e] in <bc38a7e9ac144e5b8f3cbfa1d1cb295b>:0 
  at Android.Support.V4.App.FragmentTransactionInvoker.Commit () [0x00033] in <27c17fe440cf491ba8255bcefade6e02>:0 
  at Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.SwitchContentAsync (Xamarin.Forms.Page view, System.Boolean animated, System.Boolean removed, System.Boolean popToRoot) [0x0014b] in <651b788f2205433c9db3a98957b5b8aa>:0 
  at Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.OnPopViewAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00021] in <651b788f2205433c9db3a98957b5b8aa>:0 
  at Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.PopViewAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00000] in <651b788f2205433c9db3a98957b5b8aa>:0 
  at Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.OnPopped (System.Object sender, Xamarin.Forms.Internals.NavigationRequestedEventArgs e) [0x0000e] in <651b788f2205433c9db3a98957b5b8aa>:0 
  at Xamarin.Forms.NavigationPage+<Xamarin-Forms-INavigationPageController-PopAsyncInner>d__63.MoveNext () [0x0006e] in <83d3340f3b274d389854ce45f51043f6>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at Xamarin.Forms.NavigationPage+<PopAsync>d__38.MoveNext () [0x001b9] in <83d3340f3b274d389854ce45f51043f6>:0 
   --- End of inner exception stack trace ---
  at Xamarin.Forms.NavigationPage+<>c.<SafePop>b__93_0 (System.Threading.Tasks.Task`1[TResult] t) [0x0000e] in <83d3340f3b274d389854ce45f51043f6>:0 
  at System.Threading.Tasks.ContinuationTaskFromResultTask`1[TAntecedentResult].InnerInvoke () [0x00027] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Threading.Tasks.Task.Execute () [0x00016] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
---> (Inner Exception #0) Java.Lang.RuntimeException: Can not perform this action after onSaveInstanceState
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at Java.Interop.JniEnvironment+InstanceMethods.CallIntMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method) [0x00084] in <bd356ef77b9a4127a500b8385b303c4b>:0 
  at Android.Runtime.JNIEnv.CallIntMethod (System.IntPtr jobject, System.IntPtr jmethod) [0x0000e] in <bc38a7e9ac144e5b8f3cbfa1d1cb295b>:0 
  at Android.Support.V4.App.FragmentTransactionInvoker.Commit () [0x00033] in <27c17fe440cf491ba8255bcefade6e02>:0 
  at Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.SwitchContentAsync (Xamarin.Forms.Page view, System.Boolean animated, System.Boolean removed, System.Boolean popToRoot) [0x0014b] in <651b788f2205433c9db3a98957b5b8aa>:0 
  at Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.OnPopViewAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00021] in <651b788f2205433c9db3a98957b5b8aa>:0 
  at Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.PopViewAsync (Xamarin.Forms.Page page, System.Boolean animated) [0x00000] in <651b788f2205433c9db3a98957b5b8aa>:0 
  at Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.OnPopped (System.Object sender, Xamarin.Forms.Internals.NavigationRequestedEventArgs e) [0x0000e] in <651b788f2205433c9db3a98957b5b8aa>:0 
  at Xamarin.Forms.NavigationPage+<Xamarin-Forms-INavigationPageController-PopAsyncInner>d__63.MoveNext () [0x0006e] in <83d3340f3b274d389854ce45f51043f6>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <7f637a73ebd0402caa24252e5f30bf7b>:0 
  at Xamarin.Forms.NavigationPage+<PopAsync>d__38.MoveNext () [0x001b9] in <83d3340f3b274d389854ce45f51043f6>:0 
  --- End of managed Java.Lang.RuntimeException stack trace ---
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
    at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1493)
    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1511)
    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:638)
    at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:617)
    at md5b60ffeb829f638581ab2bb9b1a7f4f3f.FormsAppCompatActivity.n_onBackPressed(Native Method)
    at md5b60ffeb829f638581ab2bb9b1a7f4f3f.FormsAppCompatActivity.onBackPressed(FormsAppCompatActivity.java:40)
    at android.app.Activity.onKeyUp(Activity.java:2713)
    at android.view.KeyEvent.dispatch(KeyEvent.java:3280)
    at android.app.Activity.dispatchKeyEvent(Activity.java:2983)
    at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:524)
    at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50)
    at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:241)
    at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50)
    at com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2689)
    at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:5233)
    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5186)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4633)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4686)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4652)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4794)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4660)
    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4851)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4633)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4686)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4652)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4660)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4633)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4686)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4652)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4827)
    at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:5070)
    at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2877)
    at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2449)
    at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2440)
    at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2854)
    at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
    at android.os.MessageQueue.nativePollOnce(Native Method)
    at android.os.MessageQueue.next(MessageQueue.java:323)
    at android.os.Looper.loop(Looper.java:143)
    at android.app.ActivityThread.main(ActivityThread.java:7230)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

【问题讨论】:

  • 异常的本质是这样的;在 onSaveInstanceState 之后无法执行此操作。你有任何可以添加的相关代码吗?
  • @GeraldVersluis 我不知道我可以在这里添加什么。因为它可以在用户弹出页面时出现在任何地方
  • this question 的答案看起来适合您吗?
  • 所以问题只发生在android上?你测试过其他操作系统吗?
  • @Motivated 是的,仅在 android 上。

标签: c# xamarin.android xamarin.forms


【解决方案1】:

因为 FormsAppCompatActivity

不允许您的代码操纵页面显示...

就是这样。我已经搜索了很多,此刻别无选择。也许这是一个错误,无论如何我们有 Push 的权利,所以也有。但它不会。 我选择的解决方案是:

  1. 从历史中找出目标页面
  2. 将其从 NavigationStack 中移除,以便将其推回 NavigationStack 的顶部
  3. 然后我可以切断 NavigationStack 的所需页面

【讨论】:

    【解决方案2】:

    第一行是说你的任务崩溃了,所以你的应用程序崩溃了。添加此类

    public static class LogException
    {
        public static void LogExceptions(this Task task)
        {
            task.ContinueWith(t =>
            {
                var aggException = t.Exception.Flatten();
                foreach (var exception in aggException.InnerExceptions)
                {
                    System.Diagnostics.Debug.WriteLine("LOG EXCEPTION catch: " + exception);
                }
            },
            TaskContinuationOptions.OnlyOnFaulted);
        }
    }
    

    并像这样使用它:

    Task.Factory.StartNew(() => PopYourPage()).LogExceptions();
    

    会捕获这些异常,而不会杀死您的应用。 你在说什么,你能解释清楚吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多