簡體   English   中英

活動轉換:執行停止未恢復的活動

[英]Activity Transition: Performing stop of activity that is not resumed

我正在嘗試僅在棒棒糖上使用新API進行活動轉換(我使用的是緊湊版本),所以我在活動A中實現了從活動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次發生一次,並且僅在某些特定設備上發生(它在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()之前被殺死。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM