android - Activity 转换 : Performing stop of activity that is not resumed

标签 android animation android-activity android-5.0-lollipop android-lifecycle

我正在尝试仅在 Lollipop 上使用新 API 进行 Activity 转换(不过我使用的是紧凑版),因此我在 Activity A 中实现了从 Activity A 到 Activity B 的动画:

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

因为我对这个 Activity 的进入或退出不感兴趣,所以我想看到的唯一动画是在与 Activity B 的共享 View 中。

启动 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),所以内容没有进入。该应用程序没有崩溃,用户仍然可以按返回键并“重试”,但这不是一个很好的用户体验。

很难对其进行测试,因为它每 10/20 次发生一次,并且仅在某些特定设备上发生(它在 Sony 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}

最佳答案

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

Memory :设备可能内存不足,因此 Android 正在终止非前台 Activity 。也许它试图在 Activity A 被终止后用 fabButton 做一些事情。您能否减少内存消耗,看看是否可以减少或消除问题?

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

关于android - Activity 转换 : Performing stop of activity that is not resumed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29891353/

相关文章:

java - 表达式预期错误

ios - 更改 dismissViewControllerAnimated 的动画

android - 如何杀死我自己的 Activity - 艰难的方式

java - 如何在 Android 应用程序退出之前进行一些清理?

android - Kotlin-在随机列表中获取新的项目索引

java - 使用游标从 SQLite 返回行,数据库为空时出错

html - CSS链接悬停动画

android - Activity 转换期间动画缓慢

android - 为什么Android应用程序无法在Intellij IDEA中构建?

CSS3 无法反转动画