7

我正在尝试使用新的API仅用于棒棒糖上的活动转换(我正在使用紧凑版本寿),所以我正在从活动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()); 

,而活动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次发生一次,并且只发生在某些特定设备上(它发生在索尼Xperia Z3 compact上更多)。

另外:

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} 
+0

嘿。我有着同样的问题。你有没有想过是什么原因造成的? – black

+0

不幸的是内存问题 –

回答

1

从其他的答案在这里看,我可以看到一对夫妇的可能性。

Memory:设备内存不足可能会导致设备运行不稳定,所以Android正在消除非前景活动。也许它试图在活动A被杀后用fabButton做些事情。你可以减少你的内存消耗,看看是否减少或消除了这个问题?

Lifecycle:如果您正在从活动A的onStart()方法内从活动A过渡到活动B,则活动A可能会在它运行之前被杀死onResume()。如果您在onStart()中有任何重要的代码,请尝试将其移至onResume()。这应该防止活动A在达到onResume()之前被杀死。