我一直在研究现有的代码库并且浏览我们的崩溃日志服务我注意到一个非常频繁发生的异常,我无法重现这个问题,我也没有相关的上下文尝试挖掘的场景,因为这是一个非常大的项目,现在越来越难以找到造成这种异常的原因。
我一直在网上搜索类似的问题,但找不到任何有用的信息。 如果有人熟悉这个问题,我们将非常感谢您的帮助。
Stacktrace如下:
java.lang.NullPointerException
at android.animation.PropertyValuesHolder.setupSetterAndGetter(PropertyValuesHolder.java:505)
at android.animation.ObjectAnimator.initAnimation(ObjectAnimator.java:487)
at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:517)
at android.animation.ValueAnimator.start(ValueAnimator.java:936)
at android.animation.ValueAnimator.start(ValueAnimator.java:946)
at android.animation.ObjectAnimator.start(ObjectAnimator.java:465)
at android.animation.AnimatorSet$1.onAnimationEnd(AnimatorSet.java:579)
at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1056)
at android.animation.ValueAnimator.access$400(ValueAnimator.java:50)
at android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:644)
at android.animation.ValueAnimator$AnimationHandler.run(ValueAnimator.java:660)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:543)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(NativeStart.java)
干杯。
答案 0 :(得分:6)
该问题原来是使用Handler
从postDelayed()
调用的动画,最终导致尝试设置空View
引用的动画,因为它不是{\ n}根据它的主机生命周期事件正确清理。
答案 1 :(得分:4)
也许你的tagret为null,使用animatorSet.getTarget()打印日志以查看
答案 2 :(得分:2)
我使用时也会得到这个堆栈跟踪: ObjectAnimator animator = ObjectAnimator.ofFloat(this," scale",1); .... animator.start()
在android 4.0.X中运行,但对于更高版本可以,你也可以推荐这个人commit,虽然我不知道如何修复,但是这个肯定是根本原因。
答案 3 :(得分:0)
我现在经历了这个异常,并发现我从getActivity().findViewById
获取了动画视图的实例。在片段中时,我必须从包含视图的rootview实例化它。
我基本上将视图从Activity移动到Fragment布局,但没有更改代码。
所以rootview.findViewById
解决了我的问题。
我的堆栈跟踪:
java.lang.NullPointerException
at android.animation.PropertyValuesHolder.setupSetterAndGetter(PropertyValuesHolder.java:505)
at android.animation.ObjectAnimator.initAnimation(ObjectAnimator.java:392)
at android.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:495)
at android.animation.ValueAnimator.start(ValueAnimator.java:913)
at android.animation.ValueAnimator.start(ValueAnimator.java:923)
at android.animation.ObjectAnimator.start(ObjectAnimator.java:370)
at eu.davidea.passwordcloud.ui.ItemDetailFragment$3.onClick(ItemDetailFragment.java:162)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
答案 4 :(得分:0)
相信我,我在4.0.x设备上找到了此崩溃问题的解决方案。
问题是当你使用没有'start'和'end'值的ObjectAnimator时,4.0.x设备上的api找不到要实现的'start'值。
例如,这将导致4.0.x设备崩溃
copy
此代码适用于所有api级设备
int endRadiusValue = 10;
ObjectAnimator
.ofFloat(roundedGradientDrawable, "cornerRadius", endRadiusValue)
.setDuration(200)
.start();
答案 5 :(得分:0)
原因是目标视图为空。 ObjectAnimator ofFloat(Object target, ...)
。
此次崩溃将在4x设备中仅抛出
其他设备没有崩溃
答案 6 :(得分:-1)
我通过将动画添加到animationSet来解决问题,如下所示: