活动转换:执行停止未恢复的活动

我正在尝试仅在棒棒糖上使用新API进行活动转换(我使用的是紧凑版本),所以我在活动A中实现了从活动A到活动B的animation

getWindow().setReenterTransition(null); getWindow().setExitTransition(null); getWindow().setAllowEnterTransitionOverlap(false); getWindow().setAllowReturnTransitionOverlap(false); 

因为我对进入或退出此活动不感兴趣,我想看到的唯一animation是在活动B的共享视图中。

对于启动活动B:

 ActivityCompat.startActivity(this, intent, ActivityOptionsCompat.makeSceneTransitionAnimation(this, fabButton, getString(R.string.transition_fab)).toBundle()); 

并设置活动B:

 getWindow().setEnterTransition(new EmptyTransition()); getWindow().setReturnTransition(null); getWindow().setAllowEnterTransitionOverlap(false); getWindow().setAllowReturnTransitionOverlap(false); getWindow().getEnterTransition().addListener(listener). 

同样,我对返回转换的输入转换不感兴趣,因为内容被隐藏,直到调用了输入转换监听器方法’onTransitionEnd’,因此我的转换全部基于从活动A移动/增长到活动B的共享元素当这个过渡完成后,我将把内容带入。

一切正常,但不是非常强大的设备(所以非所有非Nexus),活动A不时会崩溃:

 java.lang.RuntimeException: Performing stop of activity that is not resumed: {com.transferwise.android.debug/com.transferwise.android.activity.LoggedInMainActivity} 

然后发生共享元素的转换,但是不调用侦听器(不是事件TransitionStart),因此内容不会进入。 该应用程序没有崩溃,用户仍然可以按下并“再试一次”,但它不是一个非常好的用户体验。

很难对它进行测试,因为它每10/20次发生一次并且仅在某些特定设备上发生(它在Sony Xperia Z3紧凑型上发生的更多)。

也:

 Danieles-MacBook-Pro-2:~ danielebottillo$ adb shell dumpsys activity p | grep com.package.main.debug *APP* UID 10349 ProcessRecord{3b27508d 18371:com.package.main.debug/u0a349} dir=/data/app/com.package.main.debug-1/base.apk publicDir=/data/app/com.package.main.debug-1/base.apk data=/data/data/com.package.main.debug packageList={com.package.main.debug} - ActivityRecord{2f07bdf8 u0 com.package.main.debug/com.package.main.activity.ActivityA t1196} - ActivityRecord{1e871eb3 u0 com.package.main.debug/com.package.main.activity.ActivityB t1196} - 28ea3e28/com.android.providers.settings/.SettingsProvider->18371:com.package.main.debug/u0a349 s1/1 u0/0 +27m9s645ms - ReceiverList{40f2178 18371 com.package.main.debug/10349/u0 remote:39e102db} - ReceiverList{2e7456a6 18371 com.package.main.debug/10349/u0 remote:dde3801} - ReceiverList{39e2f1b7 18371 com.package.main.debug/10349/u0 remote:362300b6} - ReceiverList{3afa7bd5 18371 com.package.main.debug/10349/u0 remote:33e4088c} Proc # 0: fore F/A/T trm:10 18371:com.package.main.debug/u0a349 (top-activity) PID #18371: ProcessRecord{3b27508d 18371:com.package.main.debug/u0a349} 

从这里的其他答案来看,我可以看到几种可能性。

内存 :设备可能内存不足,因此Android会杀死非前台活动。 也许在活动A被杀之后,它正试图用fabButton 。 你可以减少你的内存消耗,看看是否减少或消除了这个问题?

生命周期 :如果您从活动A的onStart()方法中从活动A转换到活动B,那么活动A可能会在它运行onResume()之前被杀死。 如果onStart()有任何重要代码,请尝试将其移至onResume() 。 这应该可以防止活动A在到达onResume()之前被杀死。