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

7

我正在尝试在Android 5.0上使用新的活动转换API(尽管我正在使用压缩版本),因此我正在实现从Activity A到Activity B的动画,在Activity A中:

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

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

启动Activity B:

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

还有Activity B的设置:

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

我并不关心返回过渡的进入过渡,因为内容在调用进入过渡监听器方法“onTransitionEnd”之前是隐藏的,所以我的过渡全部基于共享元素,从Activity A移动/增长到Activity B,当此过渡完成后,我将呈现内容。

一切都正常,但在一些性能较低的设备上(所有非Nexus设备)时,Activity A偶尔会静默崩溃,并弹出以下错误信息:

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

共享元素的转换发生了,但是监听器没有被调用(甚至TransitionStart事件也没触发),因此内容未显示。应用程序没有崩溃,用户仍然可以按返回按钮并“重试”,但这并不是很好的用户体验。

由于它只在某些特定设备上发生(尤其是Sony Xperia Z3 Compact),而且每10/20次只有一次,因此很难测试它。

另外:

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}

嘿。我也遇到了同样的问题。你最后弄清楚是什么原因导致的吗? - black
只是内存问题,不幸的是。 - Daniele Bottillo
1个回答

1

从其他答案中可以看到,有几个可能性。

内存:设备的内存可能不足,因此Android会杀死非前台活动。也许在A活动被杀死后,它仍在尝试使用fabButton。您可以减少内存消耗并查看是否减少或消除了问题。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接