4

AppBarLayoutの標高を0に設定しようとしています(デフォルト値に戻っています)。 何回か(必ずしもそうではない)とのみが、API21(> = 22などは正常に動作します)のにクラッシュします。AppBarLayoutの標高/ StateListAnimatorを設定するとAndroid JNIがクラッシュする

下記のリンクで説明したように、私は(それがサポート-libの24.0.0以降標高を設定するには、「公式」の方法だから)StateListAnimatorを使用しています:

https://stackoverflow.com/a/37992366/2170109


私の実際この方法は、次のようになります。2つのXML-ファイル(他の1がandroid:valueTo="0"を設定している)と一緒に

public void setAppBarElevation(final boolean visible) { 
    if (appBar != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    appBar.setStateListAnimator(AnimatorInflater.loadStateListAnimator(this, (visible) ? R.animator.appbar_elevated : R.animator.appbar_not_elevated)); 
    } 
} 

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
    <objectAnimator android:propertyName="elevation" 
        android:valueTo="@dimen/default_appbar_elevation" 
        android:valueType="floatType"/> 
    </item> 
</selector> 

が、私は違うのAndroidバージョン(API 19、21、23、24、25)といくつかのデバイスをテストしてみたし、それが唯一の21

ログにクラッシュだ、それはいくつかのJNIだということを示して-error(と思うStateListAnimatorから来ている)高度を設定するとき:

--------- beginning of system 
JNI DETECTED ERROR IN APPLICATION: cant call void android.view.View.setElevation(float) on null object 
    in call to CallVoidMethodV 
    from void android.animation.PropertyValuesHolder.nCallFloatMethod(java.lang.Object, long, float) 
"main" prio=5 tid=1 Runnable 
    | group="main" sCount=0 dsCount=0 obj=0x72fc2000 self=0xf421c500 
    | sysTid=20172 nice=0 cgrp=apps sched=0/0 handle=0xf77de160 
    | state=R schedstat=(3803514732 320072004 1563) utm=340 stm=40 core=0 HZ=100 
    | stack=0xff6fb000-0xff6fd000 stackSize=8MB 
    | held mutexes= "mutator lock"(shared held) 
    native: #00 pc 00005b13 /system/lib/libbacktrace_libc++.so (UnwindCurrent::Unwind(unsigned int, ucontext*)+83) 
    native: #01 pc 00002e92 /system/lib/libbacktrace_libc++.so (Backtrace::Unwind(unsigned int, ucontext*)+34) 
    native: #02 pc 003c8f68 /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, char const*, art::mirror::ArtMethod*)+136) 
    native: #03 pc 00391f8d /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+285) 
    native: #04 pc 001006b0 /system/lib/libart.so (art::JniAbort(char const*, char const*)+1024) 
    native: #05 pc 0010125f /system/lib/libart.so (art::JniAbortF(char const*, char const*, ...)+111) 
    native: #06 pc 001016b2 /system/lib/libart.so (art::ScopedCheck::CheckVirtualMethod(_jobject*, _jmethodID*)+514) 
    native: #07 pc 00112340 /system/lib/libart.so (art::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, char*)+144) 
    native: #08 pc 000776ca /system/lib/libandroid_runtime.so (_JNIEnv::CallVoidMethod(_jobject*, _jmethodID*, ...)+42) 
    native: #09 pc 00123ecb /system/lib/libandroid_runtime.so (???) 
    native: #10 pc 00089596 /data/dalvik-cache/x86/[email protected]@boot.oat (Java_android_animation_PropertyValuesHolder_nCallFloatMethod__Ljava_lang_Object_2JF+174) 
    at android.animation.PropertyValuesHolder.nCallFloatMethod(Native method) 
    at android.animation.PropertyValuesHolder.access$400(PropertyValuesHolder.java:38) 
    at android.animation.PropertyValuesHolder$FloatPropertyValuesHolder.setAnimatedValue(PropertyValuesHolder.java:1296) 
    at android.animation.ObjectAnimator.animateValue(ObjectAnimator.java:952) 
    at android.animation.ValueAnimator.animationFrame(ValueAnimator.java:1207) 
    at android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1248) 
    at android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:659) 
    at android.animation.ValueAnimator$AnimationHandler.run(ValueAnimator.java:682) 
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
    at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
    at android.view.Choreographer.doFrame(Choreographer.java:549) 
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5219) 
    at java.lang.reflect.Method.invoke!(Native method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

HIDにどのような方法があります現在のSupport-Libraryを使用してAppBarのシャドウを再アクティブ化します(今のところ25.0.0を使用していますが、24.x.xでもクラッシュします)。

答えて

0

あなたが試すことができますandroid:stateListAnimator="@null"

関連する問題