android - Xamarin 形成 android 9 崩溃

标签 android xamarin xamarin.forms android-9.0-pie

我开发了一个在 Android 8 上运行良好的 Xamarin Forms 应用程序。但是当我在 Android 9 上运行它时我遇到了崩溃。崩溃似乎发生在从一个页面过渡到另一个页面或显示等待弹出窗口时。任何人都可以帮助确定这些仅在 Android 9 中发生的崩溃的原因。以下是调试中的输出:

java.lang.IllegalArgumentException: Cannot set 'scaleX' to Float.NaN
android.view.View.sanitizeFloatPropertyValue()View.java:15549
android.view.View.sanitizeFloatPropertyValue()View.java:15523

android.view.View.setScaleX()View.java:14912
mono.android.animation.ValueAnimator_AnimatorUpdateListenerImplementor.n_onAnimationUpdate(Native Method)
mono.android.animation.ValueAnimator_AnimatorUpdateLis

tenerImplementor.onAnimationUpdate()ValueAnimator_AnimatorUpdateListenerImplementor.java:30
android.animation.ValueAnimator.animateValue()ValueAnimator.java:1547
android.animation.ValueAnimator.animateBasedOnTime()ValueAnimator.java:1339
android.animation.ValueAnimator.doAnimationFrame()ValueAnimator.java:1471
android.animation.AnimationHandler.doAnimationFrame()AnimationHandler.java:146
android.animation.AnimationHandler.access$100()AnimationHandler.java:37
android.animation.AnimationHandler$1.doFrame()AnimationHandler.java:54
android.view.Choreographer$CallbackRecord.run()Choreographer.java:1170
android.view.Choreographer.doCallbacks()Choreographer.java:984
android.view.Choreographer.doFrame()Choreographer.java:806
android.view.Choreographer$FrameDisplayEventReceiver.run()Choreographer.java:1158
android.os.Handler.handleCallback()Handler.java:873
android.os.Handler.dispatchMessage()Handler.java:99
android.os.Looper.loop()Looper.java:193
android.app.ActivityThread.main()ActivityThread.java:6863
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run()RuntimeInit.java:537
com.android.internal.os.ZygoteInit.main()ZygoteInit.java:858
Xamarin caused by: Java.Lang.IllegalArgumentException: Cannot set 'scaleX' to Float.NaN
Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod(JniObjectReference instance, JniObjectReference type, JniMethodInfo method, JniArgumentValue* args)<8acc8089c2ed40d08469fbaa6710a44c>:0
Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod(string encodedMember, IJavaPeerable self, JniArgumentValue* parameters)<8acc8089c2ed40d08469fbaa6710a44c>:0
Android.Views.View.set_ScaleX(float value)Android.Views.View.cs:8908
Xamarin.Forms.Platform.Android.VisualElementTracker.UpdateScale()
Xamarin.Forms.Platform.Android.VisualElementTracker.HandlePropertyChanged(object sender, PropertyChangedEventArgs e)
Xamarin.Forms.Platform.Android.VisualElementTracker.HandleRedrawNeeded(object sender, EventArg<T> e)
Xamarin.Forms.VisualElement.BatchCommit()
Xamarin.Forms.AnimationExtensions.HandleTweenerUpdated(object o, EventArgs args)
Xamarin.Forms.Tweener.<Start>b__22_0(long step)
Xamarin.Forms.Internals.Ticker.SendSignals(int timestep)
Xamarin.Forms.Platform.Android.AndroidTicker.OnValOnUpdate(object sender, ValueAnimator.AnimatorUpdateEventArgs e)
Android.Animation.ValueAnimator.IAnimatorUpdateListenerImplementor.OnAnimationUpdate(ValueAnimator animation)Android.Animation.ValueAnimator.cs:147
Android.Animation.ValueAnimator.IAnimatorUpdateListenerInvoker.n_OnAnimationUpdate_Landroid_animation_ValueAnimator_(IntPtr jnienv, IntPtr native__this, IntPtr native_animation)Android.Animation.ValueAnimator.cs:95
at (wrapper dynamic-method) System.Object.19(intptr,intptr,intptr)
--- End of managed Java.Lang.IllegalArgumentException stack trace ---
java.lang.IllegalArgumentException: Cannot set 'scaleX' to Float.NaN
android.view.View.sanitizeFloatPropertyValue()View.java:15549
android.view.View.sanitizeFloatPropertyValue()View.java:15523
android.view.View.setScaleX()View.java:14912
mono.android.animation.ValueAnimator_AnimatorUpdateListenerImplementor.n_onAnimationUpdate(Native Method)
mono.android.animation.ValueAnimator_AnimatorUpdateListenerImplementor.onAnimationUpdate()ValueAnimator_AnimatorUpdateListenerImplementor.java:30
android.animation.ValueAnimator.animateValue()ValueAnimator.java:1547
android.animation.ValueAnimator.animateBasedOnTime()ValueAnimator.java:1339
android.animation.ValueAnimator.doAnimationFrame()ValueAnimator.java:1471
android.animation.AnimationHandler.doAnimationFrame()AnimationHandler.java:146
android.animation.AnimationHandler.access$100()AnimationHandler.java:37
android.animation.AnimationHandler$1.doFrame()AnimationHandler.java:54
android.view.Choreographer$CallbackRecord.run()Choreographer.java:1170
android.view.Choreographer.doCallbacks()Choreographer.java:984
android.view.Choreographer.doFrame()Choreographer.java:806
android.view.Choreographer$FrameDisplayEventReceiver.run()Choreographer.java:1158
android.os.Handler.handleCallback()Handler.java:873
android.os.Handler.dispatchMessage()Handler.java:99
android.os.Looper.loop()Looper.java:193
android.app.ActivityThread.main()ActivityThread.java:6863
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run()RuntimeInit.java:537
com.android.internal.os.ZygoteInit.main()ZygoteInit.java:858

最佳答案

有人可能会发现这很有用,我在 Xamarin Forms 中使用 ScaleTo() 时遇到了这个错误。代码在 UWP 中运行良好,但在 Android 上运行时(我在 Android KitKat 和 Android Pie 上试过)我收到了这个错误:Java.Lang.IllegalArgumentException: 'Cannot set 'scaleX ' 到 Float.NaN'

这个错误是因为我在 async Task 中使用了 ScaleTo()

这是我之前的代码

void StartTimer()
{
    Task.Run(async () =>
    {
       await TimerBar.ScaleTo(0, 5000, null);
    });
}

但这给了我错误,因为我试图在主线程以外的线程上修改 UI 元素。请注意,所有 UI Activity 都在 Main Thread 上进行。更改或修改 UI 元素或其属性不适用于主线程以外的其他线程。在 Xamarin Forms 中,如果要将执行从主线程切换到另一个线程,请使用 Device.BeginInvokeOnMainThread(async() => awaited code...;)。所以我修改了我的代码。

这是修改过的代码

void StartTimer()
{
    Device.BeginInvokeOnMainThread(async () =>
    {
        await TimerBar.ScaleTo(0, 5000, null));
    });
}

另一种方法是直接从 XAML 页面调用按钮点击

<Button Text="Start Timer" Clicked="StartTimer" />
async void StartTimer(object sender, EventArgs e)
{
    await TimerBar.ScaleTo(0, 5000, null);
}

关于android - Xamarin 形成 android 9 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54898711/

相关文章:

c# - xamarin,visual studio 2015 组件元素未声明

android - 我可以使用 XAML 在 Xamarin.Forms 中设计 UI 吗

google-maps - xamarin.forms map 隐藏缩放按钮 (+-)

android - Xamarin.Forms.Maps map 仅在一台 Android 设备上显示为黑色

android x 设计依赖

javascript - 使用 html5/javascript 将键盘设置为即使在 "go"按下时也保持打开状态?

java - SOAP 信封响应错误 : Error reading XMLStreamReader

android - 圆形按钮动态大小android

android - RecyclerView 适配器仅在滚动时添加重复的 TEXTVIEW

android - 错误资源目录名称无效 : "res content"