Android 6.0 Marshmallow: erreur bizarre avec une animation de fragment
Une de mes applications dans l'app store fonctionne parfaitement bien avec Android 5.0, mais depuis aujourd'hui, j'ai mon appareil mis à niveau à la version 6.0 j'ai d'étranges erreurs. J'ai rétréci vers le bas pour le fragment animations de transition.
ftrans.setCustomAnimations(inAnim, outAnim, inAnim, outAnim);
Sans cette ligne, mon application fonctionne aussi très bien sur 6.0, avec elle, j'obtiens cette erreur :
10-14 14:36:51.016 23750-23820/? A/libc: Fatal signal 7 (SIGBUS), code 1, fault addr 0xb1 in tid 23820 (hwuiTask1)
10-14 14:36:51.118 200-200/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
10-14 14:36:51.118 200-200/? A/DEBUG: Build fingerprint: 'google/hammerhead/hammerhead:6.0/MRA58K/2256973:user/release-keys'
10-14 14:36:51.118 200-200/? A/DEBUG: Revision: '0'
10-14 14:36:51.118 200-200/? A/DEBUG: ABI: 'arm'
10-14 14:36:51.118 200-200/? A/DEBUG: pid: 23750, tid: 23820, name: hwuiTask1 >>> com.xxx.xxx <<<
10-14 14:36:51.118 200-200/? A/DEBUG: signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 0xb1
10-14 14:36:51.110 200-200/? W/debuggerd: type=1400 audit(0.0:54): avc: denied { search } for name="com.xxx.xxx" dev="mmcblk0p28" ino=1499496 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0
10-14 14:36:51.136 200-200/? A/DEBUG: r0 00000073 r1 96efeed8 r2 00000002 r3 00000005
10-14 14:36:51.136 200-200/? A/DEBUG: r4 00000006 r5 00000073 r6 00000000 r7 96eff1e8
10-14 14:36:51.136 200-200/? A/DEBUG: r8 00000005 r9 96efebd8 sl 96eff470 fp 00000016
10-14 14:36:51.136 200-200/? A/DEBUG: ip 000000b1 sp 96efebd8 lr 00000006 pc b5d887d2 cpsr 300f0030
10-14 14:36:51.142 200-200/? A/DEBUG: #00 pc 0005a7d2 /system/lib/libhwui.so
10-14 14:36:51.142 200-200/? A/DEBUG: #01 pc 0005b8a3 /system/lib/libhwui.so
10-14 14:36:51.142 200-200/? A/DEBUG: #02 pc 00055e0b /system/lib/libhwui.so
10-14 14:36:51.142 200-200/? A/DEBUG: #03 pc 0005c9fd /system/lib/libhwui.so
10-14 14:36:51.142 200-200/? A/DEBUG: #04 pc 0001fd93 /system/lib/libhwui.so
10-14 14:36:51.142 200-200/? A/DEBUG: #05 pc 0001006d /system/lib/libutils.so (android::Thread::_threadLoop(void*)+112)
10-14 14:36:51.142 200-200/? A/DEBUG: #06 pc 0005ecd3 /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+70)
10-14 14:36:51.142 200-200/? A/DEBUG: #07 pc 0003f3e7 /system/lib/libc.so (__pthread_start(void*)+30)
10-14 14:36:51.142 200-200/? A/DEBUG: #08 pc 00019b43 /system/lib/libc.so (__start_thread+6)
10-14 14:36:51.500 200-200/? W/debuggerd: type=1400 audit(0.0:55): avc: denied { read } for name="kgsl-3d0" dev="tmpfs" ino=5756 scontext=u:r:debuggerd:s0 tcontext=u:object_r:gpu_device:s0 tclass=chr_file permissive=0
10-14 14:36:52.189 799-25288/? W/ActivityManager: Force finishing activity com.xxx.xxx/.MainActivity
10-14 14:36:52.190 200-200/? E/DEBUG: AM write failed: Broken pipe
10-14 14:36:52.190 799-815/? I/BootReceiver: Copying /data/tombstones/tombstone_01 to DropBox (SYSTEM_TOMBSTONE)
10-14 14:36:52.257 799-901/? I/OpenGLRenderer: Initialized EGL, version 1.4
10-14 14:36:52.286 799-4576/? D/GraphicsStats: Buffer count: 5
10-14 14:36:52.286 799-4576/? I/WindowState: WIN DEATH: Window{d660a8a u0 com.xxx.xxx/com.xxx.xxx.MainActivity}
10-14 14:36:52.321 799-808/? I/art: Background partial concurrent mark sweep GC freed 71211(4MB) AllocSpace objects, 18(1032KB) LOS objects, 33% free, 32MB/48MB, paused 3.554ms total 114.532ms
10-14 14:36:52.372 214-214/? I/Zygote: Process 23750 exited due to signal (7)
10-14 14:36:52.379 799-1413/? I/ActivityManager: Process com.xxx.xxx (pid 23750) has died
10-14 14:36:52.386 799-1418/? I/ActivityManager: Killing 23069:com.android.documentsui/u0a35 (adj 15): empty #17
10-14 14:36:52.864 799-817/? W/WindowAnimator: Failed to dispatch window animation state change.
10-14 14:36:52.864 799-817/? W/WindowAnimator: android.os.DeadObjectException
10-14 14:36:52.864 799-817/? W/WindowAnimator: at android.os.BinderProxy.transactNative(Native Method)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at android.os.BinderProxy.transact(Binder.java:503)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at android.view.IWindow$Stub$Proxy.onAnimationStopped(IWindow.java:534)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at com.android.server.wm.WindowAnimator.updateWindowsLocked(WindowAnimator.java:286)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at com.android.server.wm.WindowAnimator.animateLocked(WindowAnimator.java:678)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at com.android.server.wm.WindowAnimator.-wrap0(WindowAnimator.java)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at com.android.server.wm.WindowAnimator$1.doFrame(WindowAnimator.java:123)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:856)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at android.view.Choreographer.doCallbacks(Choreographer.java:670)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at android.view.Choreographer.doFrame(Choreographer.java:603)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at android.os.Handler.handleCallback(Handler.java:739)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at android.os.Handler.dispatchMessage(Handler.java:95)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at android.os.Looper.loop(Looper.java:148)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at android.os.HandlerThread.run(HandlerThread.java:61)
10-14 14:36:52.864 799-817/? W/WindowAnimator: at com.android.server.ServiceThread.run(ServiceThread.java:46)
10-14 14:36:52.983 1889-2087/? W/OpenGLRenderer: Incorrectly called buildLayer on View: ShortcutAndWidgetContainer, destroying layer...
10-14 14:36:52.983 1889-2087/? W/OpenGLRenderer: Incorrectly called buildLayer on View: ShortcutAndWidgetContainer, destroying layer...
Le "en" animation-je utiliser ressemble à ceci :
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:interpolator/accelerate_decelerate">
<alpha
android:fromAlpha="0" android:toAlpha="1"
android:startOffset="@integer/fadein_offset"
android:duration="@integer/fadein_duration"/>
<scale
android:fromXScale="0%" android:toXScale="100%" android:fromYScale="0%" android:toYScale="100%"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="@integer/fadein_offset"
android:duration="@integer/fadein_duration"/>
"En dehors" de l'animation est identique, juste inversé.
Donc ma question est, ce que fait cette erreur et comment fais-tu fragment de transitions dans la guimauve?
Edit : mon addFragment méthode, où j'utilise setCustomAnimations(). J'ai ajouté le SDK vérifier que je utilisez l'échelle des animations qui sont problématiques sur la baisse des versions d'Android. Toutefois, de noter que ce code fonctionne sur Android <6, l'animation fonctionne très bien et n'a donc pour 3 ans.
private void addFragment(Fragment f, boolean addToBackstack, String tag) {
FragmentManager fman = getSupportFragmentManager();
FragmentTransaction ftrans = fman.beginTransaction();
// if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.HONEYCOMB) {
// ftrans.setCustomAnimations(inAnim, outAnim, inAnim, outAnim);
// }
if(addToBackstack) ftrans.addToBackStack(tag);
ftrans.replace(R.id.content, f, tag);
ftrans.commit();
}
Sur le bouton de la presse dans le fragment 1, j'ai délégué à l'activité via l'interface, et là j'appel
@Override
public void showFacts(DBCategory category) {
addFragment(FragFacts.Instance(category.id(), category.name()), true, FragFacts.TAG);
}
Edit 2 :
J'ai découvert il n'est pas de l'animation en général, c'est juste l'animation d'échelle, une partie de ma transition, qui en est la cause. Je l'ai pris, maintenant ça fonctionne.
source d'informationauteur ElDuderino
Vous devez vous connecter pour publier un commentaire.
C'est le bug sur la Guimauve quand nous faisons de l'animation d'échelle. Pour l'instant, nous avons trouvé une solution de contournement, par la mise en
view.setLayerType(View.LAYER_TYPE_SOFTWARE)
voir la documentationPour moi, c'était un NullPointer exception masqué comme cela à cause de Proguard de l'obscurcissement.
Exécuter sans Proguard et j'espère que vous verrez le sous-jacent d'exception.
J'ai eu cette exception et même problème
Failed to dispatch window animation state change.android.os.DeadObjectException
.apparemment ce qui s'est passé parce que j'ai oublié de mentionner l'activité dans le fichier de manifeste.
J'ai été en mesure de corriger en ajoutant de l'activité dans
AndroidManifest.xml
fichier.simplement ajouté à la suite de l'activité, nom de la classe et résolu le problème
exemple :
Dans mon cas, mon appli ne plante pas, mais la transition entre les activités était buggé sur >6.0. La raison en est que l'une des activités a le windowBackground propriété de son style de @null. Je lui ai dit il et qu'elle s'est fixée.