7

Tôi đang cố gắng sử dụng API mới để chuyển đổi hoạt động chỉ trên kẹo (tôi đang sử dụng phiên bản nhỏ gọn tho), vì vậy tôi đang triển khai hoạt ảnh từ hoạt động A để hoạt động B, trong hoạt động A:Hoạt động chuyển tiếp: Thực hiện dừng hoạt động không được tiếp tục

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

vì tôi không quan tâm đến việc nhập cảnh, xuất cảnh của hoạt động này, các hình ảnh động duy nhất mà tôi muốn thấy là trong giao diện chia sẻ với các hoạt động B.

Để khởi chạy Hoạt động B:

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

Và các thiết lập của Hoạt động B:

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

Một lần nữa Tôi không quan tâm đến việc chuyển nhập chuyển đổi trở lại bởi vì nội dung được ẩn cho đến khi nhập chuyển phương pháp nghe 'onTransitionEnd' được gọi, vì vậy quá trình chuyển đổi của tôi tất cả đều dựa trên yếu tố chia sẻ di chuyển/phát triển từ Hoạt động A sang Hoạt động B và khi quá trình chuyển đổi này kết thúc, tôi sẽ đưa nội dung vào.

Mọi thứ hoạt động tốt nhưng trên các thiết bị không mạnh lắm (vì vậy tất cả đều không Nexus) theo thời gian Hoạt động A âm thầm sụp đổ với:

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

Và việc chuyển đổi phần tử chia sẻ xảy ra nhưng sau đó người nghe không được gọi (không phải sự kiện TransitionStart), do đó nội dung không được nhập. Ứng dụng không bị lỗi, người dùng vẫn có thể nhấn lại và "thử lại" nhưng không phải là UX rất tốt.

Thật khó để kiểm tra nó bởi vì nó xảy ra một lần mỗi 10/20 lần và chỉ trên một số thiết bị cụ thể (nó xảy ra nhiều hơn trên Sony Xperia Z3 nhỏ gọn).

Ngoài ra:

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

Hey. Tôi có cùng vấn đề này. Bạn đã bao giờ tìm ra những gì đã gây ra nó? – black

+0

chỉ là vấn đề bộ nhớ không may –

Trả lời

1

Đánh giá từ câu trả lời khác ở đây, tôi có thể thấy một vài khả năng.

Memory: có thể thiết bị sắp hết bộ nhớ, vì vậy Android đang giết các hoạt động không có tiền cảnh. Có lẽ nó đang cố gắng làm điều gì đó với fabButton sau khi Hoạt động A bị giết. Bạn có thể giảm mức tiêu thụ bộ nhớ của bạn và xem liệu điều đó có làm giảm hoặc loại bỏ vấn đề không?

Lifecycle: nếu bạn đang chuyển từ Hoạt động A sang Hoạt động B từ trong phương thức hoạt động onStart() của Hoạt động A, thì Hoạt động A có thể bị giết trước khi chạy được onResume(). Nếu bạn có bất kỳ mã quan trọng nào trong số onStart(), hãy thử di chuyển mã đó sang onResume() thay thế. Điều đó sẽ ngăn chặn hoạt động A bị giết trước khi nó được chuyển đến onResume().

Các vấn đề liên quan