Android 活动转换:停止未恢复的活动

Android 活动转换:停止未恢复的活动,android,animation,android-activity,android-5.0-lollipop,android-lifecycle,Android,Animation,Android Activity,Android 5.0 Lollipop,Android Lifecycle,我尝试只在棒棒糖上使用新的API进行活动转换(我使用的是精简版tho),因此我在活动A中实现了从活动A到活动B的动画: getWindow().setReenterTransition(null); getWindow().setExitTransition(null); getWindow().setAllowEnterTransitionOverlap(false); getWindow().setAllowReturnTransitionOverlap(false); 因为我对该活动的进

我尝试只在棒棒糖上使用新的API进行活动转换(我使用的是精简版tho),因此我在活动A中实现了从活动A到活动B的动画:

getWindow().setReenterTransition(null);
getWindow().setExitTransition(null);
getWindow().setAllowEnterTransitionOverlap(false);
getWindow().setAllowReturnTransitionOverlap(false);
因为我对该活动的进入或退出不感兴趣,所以我只想看到与活动B共享的视图中的动画

关于启动活动B:

ActivityCompat.startActivity(this, intent, ActivityOptionsCompat.makeSceneTransitionAnimation(this, fabButton, getString(R.string.transition_fab)).toBundle());
getWindow().setEnterTransition(new EmptyTransition());
getWindow().setReturnTransition(null);
getWindow().setAllowEnterTransitionOverlap(false);
getWindow().setAllowReturnTransitionOverlap(false);
getWindow().getEnterTransition().addListener(listener).
以及活动B的设置:

ActivityCompat.startActivity(this, intent, ActivityOptionsCompat.makeSceneTransitionAnimation(this, fabButton, getString(R.string.transition_fab)).toBundle());
getWindow().setEnterTransition(new EmptyTransition());
getWindow().setReturnTransition(null);
getWindow().setAllowEnterTransitionOverlap(false);
getWindow().setAllowReturnTransitionOverlap(false);
getWindow().getEnterTransition().addListener(listener).
同样,我对回车转换的回车转换不感兴趣,因为在调用回车转换监听器方法“onTransitionEnd”之前,内容是隐藏的,所以我的转换是基于从活动A移动/增长到活动B的共享元素的,当此转换完成时,我会将内容带入

一切正常,但在功能不是很强大的设备上(因此所有非Nexus设备),活动不时会发生无声崩溃:

java.lang.RuntimeException: Performing stop of activity that is not resumed: {com.transferwise.android.debug/com.transferwise.android.activity.LoggedInMainActivity}
共享元素的转换发生了,但是监听器没有被调用(不是事件转换启动),所以内容没有进入。应用程序并没有崩溃,用户仍然可以按back并“重试”,但这不是一个很好的用户体验

测试它很困难,因为它每10/20次发生一次,并且只在某些特定设备上发生(在Sony Xperia Z3 compact上发生的次数更多)

此外:


从这里的其他答案来看,我可以看到一些可能性

:设备可能内存不足,因此Android正在停止非前台活动。可能是在活动A被终止后,它试图对
fabbuton
执行某些操作。你能降低你的内存消耗,看看这是否能减少或消除这个问题吗


:如果您正在从活动A的
onStart()
方法中从活动A转换到活动B,则活动A可能在运行
onResume()
之前被终止。如果在
onStart()
中有任何重要代码,请尝试将其移动到
onResume()
。这应该可以防止活动A在到达
onResume()
之前被杀死。我也有同样的问题。你知道是什么引起的吗?不幸的是内存问题