Error de JNI en la animación de transición de escena – Capa supera el máximo

Por favor note el EDIT en la parte inferior de la pregunta

Tengo 2 actividades: ActivityA , ActivityB con frgments asociados: FragmentA , FragmentB respectivamente. ImageView v se comparte entre esos dos fragmentos.

Algunos Código: ActivityA

 Intent intent = new Intent(this, ActivityB.class); final ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat. makeSceneTransitionAnimation(this, imageView, "photo"); ActivityCompat.startActivity(this, intent, activityOptionsCompat.toBundle()); 

ActividadB

 FragmentB fragment = new FragmentB(); getFragmentManager().beginTransaction()..replace(R.id.fragment_container, fragment, TAG).addToBackStack(TAG).commit(); 

Fragmento

 mView = (ImageView) view.findViewById(R.id.view); ViewCompat.setTransitionName(mView, "photo); 

4 de cada 5 veces está funcionando. Pero cuando no está trabajando estoy consiguiendo el error muy informativo :

 W/OpenGLRenderer﹕ Layer exceeds max. dimensions supported by the GPU (1080x10659, max=4096x4096) JNI DETECTED ERROR IN APPLICATION: JNI CallVoidMethodV called with pending exception 'java.lang.IllegalStateException' thrown in void android.os.MessageQueue.nativePollOnce(long, int):-2 

Llamada a Picasso

 Picasso.with(context).load(url).centerCrop().resize(width, height).noFade().into(mView); 

Pocas cosas que pueden causar esto:

  1. En FragmentB posición mView se calcula dinámicamente usando ViewTreeObserver.OnGlobalLayoutListener

  2. mView extiende ImageView para crear un efecto Oval en ambos fragmentos.

  3. El ViewGroup raíz es un ScrollView

Una última cosa: el Theme de ambas actividades es un hijo de

 <style name="Theme" parent="Theme.AppCompat.Light" <item name="android:windowContentTransitions">true</item> <item name="android:windowAllowEnterTransitionOverlap">true</item> <item name="android:windowAllowReturnTransitionOverlap">true</item> <item name="android:windowSharedElementEnterTransition">@android:transition/move</item> <item name="android:windowSharedElementExitTransition">@android:transition/move</item> </style> 

— EDITAR —

Pregunta y respuesta similares a mi problema y otra

Responder a resolver el problema, pero sólo para la API 21 . Estoy utilizando ActivityCompat.startActivity(...) . Es compatible con api 16 y superior, pero TransitionListener sólo está disponible desde la API 19 y admite SceneTransition desde la API 21

También android:transitionGroup="true" requiere API 21 así que ahora tengo dos preguntas principales:

  1. ¿Por qué estoy obteniendo incluso el error LayerExceeds max ? Mi View compartida no es mayor que 1080×1080.
  2. ¿Cómo puedo manejar este tipo de error en API <21 donde tanto TransitionListener como transitionGroup no están disponibles?

ERROR stacktrace

 JNI DETECTED ERROR IN APPLICATION: JNI CallVoidMethodV called with pending exception 'java.lang.IllegalStateException' thrown in void android.os.MessageQueue.nativePollOnce(long, int):-2 in call to CallVoidMethodV art/runtime/check_jni.cc:65] from void android.os.MessageQueue.nativePollOnce(long, int) art/runtime/check_jni.cc:65] "main" prio=5 tid=1 Runnable art/runtime/check_jni.cc:65] | group="main" sCount=0 dsCount=0 obj=0x72fb6000 self=0xb4827800 art/runtime/check_jni.cc:65] | sysTid=6497 nice=0 cgrp=default sched=0/0 handle=0xb6f83bec art/runtime/check_jni.cc:65] | state=R schedstat=( 1181860917 459124594 2277 ) utm=100 stm=18 core=2 HZ=100 art/runtime/check_jni.cc:65] | stack=0xbe27d000-0xbe27f000 stackSize=8MB art/runtime/check_jni.cc:65] | held mutexes= "mutator lock"(shared held) art/runtime/check_jni.cc:65] native: #00 pc 00004e64 /system/lib/libbacktrace_libc++.so (UnwindCurrent::Unwind(unsigned int, ucontext*)+23) art/runtime/check_jni.cc:65] native: #01 pc 00003665 /system/lib/libbacktrace_libc++.so (Backtrace::Unwind(unsigned int, ucontext*)+8) art/runtime/check_jni.cc:65] native: #02 pc 00256429 /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, char const*, art::mirror::ArtMethod*)+84) art/runtime/check_jni.cc:65] native: #03 pc 00238fe7 /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+158) art/runtime/check_jni.cc:65] native: #04 pc 000b191b /system/lib/libart.so (art::JniAbort(char const*, char const*)+610) art/runtime/check_jni.cc:65] native: #05 pc 000b2055 /system/lib/libart.so (art::JniAbortF(char const*, char const*, ...)+68) art/runtime/check_jni.cc:65] native: #06 pc 000b530f /system/lib/libart.so (art::ScopedCheck::ScopedCheck(_JNIEnv*, int, char const*)+1346) art/runtime/check_jni.cc:65] native: #07 pc 000bd6f7 /system/lib/libart.so (art::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+42) art/runtime/check_jni.cc:65] native: #08 pc 0006244b /system/lib/libandroid_runtime.so (???) art/runtime/check_jni.cc:65] native: #09 pc 000760c5 /system/lib/libandroid_runtime.so (android::NativeDisplayEventReceiver::dispatchVsync(long long, int, unsigned int)+40) native: #10 pc 0007628d /system/lib/libandroid_runtime.so (android::NativeDisplayEventReceiver::handleEvent(int, int, void*)+80) native: #11 pc 00012545 /system/lib/libutils.so (android::Looper::pollInner(int)+484) native: #12 pc 000125ed /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92) native: #13 pc 00081709 /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22) native: #14 pc 000b3863 /data/dalvik-cache/arm/system@framework@boot.oat (Java_android_os_MessageQueue_nativePollOnce__JI+102) at android.os.MessageQueue.nativePollOnce(Native method) at android.os.MessageQueue.next(MessageQueue.java:143) at android.os.Looper.loop(Looper.java:122) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke!(Native method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Fatal signal 11 (SIGSEGV), code 1, fault addr 0xfffffff0 in tid 6497 

One Solution collect form web for “Error de JNI en la animación de transición de escena – Capa supera el máximo”

La respuesta aceptada a la segunda pregunta que enlazó discute la razón de esto sucede: el límite de tamaño está en toda la actividad objetivo predeterminada, no sólo en el elemento (s) de transición. La adición de android:transitionGroup="true" al lugar apropiado en el diseño de transición solucionará el bloqueo. Usted no publicó su diseño en la pregunta por lo que es difícil saber a dónde iría, pero si tiene un ScrollView u otra vista muy larga que sería un buen lugar para comenzar.

Para los niveles de API antes de 21, este es un problema no. AppCompat.startActivity() funcionará en niveles de API por debajo de 21, pero la animación de transición de elemento compartido no se ejecutará. Volverá a la transición de actividad predeterminada.

  • ¿Cómo implementar correctamente el feed (similar a Facebook / Instagram) en Android?
  • Uso de Picasso con Image Getter
  • ¿Cómo escuchar los eventos completos de carga de Picasso (Android)?
  • Picasso no carga imágenes
  • Picasso Imagen para Android cargando - modelo de hilo
  • Picasso no puede cargar imágenes grandes (de la cámara y Uri local)
  • Fotos de la escala de Android picasso para ser más grande o ajustar el imageView (sin espacio en blanco)
  • Picasso IllegalArgumentException El objetivo no debe ser nulo
  • Imágenes que no se cargan con Picasso sin error
  • Picasso - obtener el camino de la imagen cargada
  • Descargando la imagen del almacenamiento de firebase usando picasso: excepción de memoria
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.