首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >活动转换:停止未恢复的活动

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

Stack Overflow用户
提问于 2015-04-27 17:03:01
回答 1查看 947关注 0票数 7

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

代码语言:javascript
复制
getWindow().setReenterTransition(null);
getWindow().setExitTransition(null);
getWindow().setAllowEnterTransitionOverlap(false);
getWindow().setAllowReturnTransitionOverlap(false);

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

启动练习B:

代码语言:javascript
复制
ActivityCompat.startActivity(this, intent, ActivityOptionsCompat.makeSceneTransitionAnimation(this, fabButton, getString(R.string.transition_fab)).toBundle());

和活动B的设置:

代码语言:javascript
复制
getWindow().setEnterTransition(new EmptyTransition());
getWindow().setReturnTransition(null);
getWindow().setAllowEnterTransitionOverlap(false);
getWindow().setAllowReturnTransitionOverlap(false);
getWindow().getEnterTransition().addListener(listener).

同样,我对返回转换的enter转换不感兴趣,因为在调用enter转换侦听器方法'onTransitionEnd‘之前,内容是隐藏的,所以我的转换都是基于从Activity A移动/增长到Activity B的共享元素,当这个转换完成时,我会将内容带进来。

一切正常,但在功能不是很强的设备上(所以都是非Nexus的),活动A会不时地发生崩溃:

代码语言:javascript
复制
java.lang.RuntimeException: Performing stop of activity that is not resumed: {com.transferwise.android.debug/com.transferwise.android.activity.LoggedInMainActivity}

然后发生了共享元素的转换,但随后不调用侦听器(不是event TransitionStart),因此内容不会进入。这个应用程序没有崩溃,用户仍然可以按back并“重试”,但它不是一个很好的用户体验。

很难测试它,因为它每10/20次发生一次,而且只在一些特定的设备上发生(它更多地发生在索尼Xperia Z3光盘上)。

另外:

代码语言:javascript
复制
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}
EN

回答 1

Stack Overflow用户

发布于 2015-09-05 00:23:07

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

Memory:这可能是因为设备内存不足,所以安卓正在扼杀非前台活动。也许它试图在活动A被终止后对fabButton做一些事情。你能减少你的内存消耗,看看这是否能减少或消除这个问题吗?

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29891353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档