15

FragmentActivity.onResume() javadoc:Sự khác nhau giữa onResume() và onResumeFragments()

văn onResume() để mảnh. Lưu ý rằng để liên kết tốt hơn với các phiên bản cũ hơn của nền tảng, tại thời điểm cuộc gọi này, các mảnh gắn liền với hoạt động sẽ không được tiếp tục. Điều này có nghĩa là trong một số trường hợp, trạng thái trước đó vẫn có thể được lưu, không cho phép các giao dịch phân đoạn thay đổi trạng thái. Để tương tác chính xác với các đoạn trong trạng thái thích hợp của chúng, bạn nên thay thế onResumeFragments().

FragmentActivity.onResumeFragments() javadoc:

Đây là phiên bản đoạn định hướng của onResume() mà bạn có thể ghi đè để thực hiện các hoạt động trong Hoạt động tại cùng một điểm nơi các mảnh vỡ của nó được nối lại. Hãy chắc chắn luôn luôn gọi đến siêu lớp.

Liệu ở trên có nghĩa là nền tảng đảm bảo rằng:

  • mảnh vỡ là bao giờ sẽ được nối lại (họ onResume() không được gọi) trong khi thực hiện FragmentActivity.onResume()
  • mảnh vỡ là luôn sẽ được tiếp tục (gọi số onResume() được gọi) trong khi thực hiện FragmentActivity.onResumeFragments()?

Nếu không, làm cách nào nhà phát triển có thể sử dụng và cảnh giác chính xác về những điều trên?

+0

Tôi đã phát hiện ra rằng thực hiện một giao dịch đoạn bên trong 'onResume() 'sau khi dụ nhà nước đã được lưu nguyên nhân _IllegalStateException: Không thể thực hiện thao tác này sau khi onSaveInstanceState_ trong khi thực hiện nó bên trong' onResumeFragments()' không. Sau đó, tôi nhận thấy tài liệu cho 'FragmentActivity.onResume()' nói chính xác điều đó. – Piovezan

Trả lời

13

Sẽ gọi onResume()?

Có, FragmentActivity.onResume() sẽ vẫn được gọi (cùng ngữ cảnh như Activity.onResume()). Ngay cả khi bạn ghi đè FragmentActivity.onResumeFragments() (phương thức bổ sung từ FragmentActivity biết phương thức đó có chứa Fragments).

Sự khác nhau giữa onResume()onResumeFragments() là gì?

FragmentActivity.onResumeFragments() là một callback trên FragmentActivity như khi Fragments nó chứa được nối lại, đó là không giống như khi Activity sơ yếu lý lịch.

Đây là phiên bản phân đoạn định hướng của onResume() mà bạn có thể ghi đè để thực hiện các thao tác trong Hoạt động tại cùng thời điểm các đoạn của nó được tiếp tục. Hãy chắc chắn luôn luôn gọi đến siêu lớp.

Khi nào nên sử dụng phương pháp nào?

Nếu bạn đang sử dụng các thư viện hỗ trợ-v4 và FragmentActivity, cố gắng để luôn luôn sử dụng onResumeFragments() thay vì onResume() trong FragmentActivity triển khai của bạn.

FragmentActivity#onResume() documentation:

Để tương tác một cách chính xác với các mảnh vỡ trong tình trạng thích hợp của họ, bạn thay vì nên ghi đè onResumeFragments().

khác biệt là tinh tế, xem https://github.com/xxv/android-lifecycle/issues/8:

onResume() nên được sử dụng cho bình thường của hoạt động và onResumeFragments() khi sử dụng thư viện compat v4. Điều này chỉ được yêu cầu khi ứng dụng chờ đợi FragmentTransaction ban đầu sẽ được hoàn thành bởi FragmentManager.

+1

Từ những gì tôi có thể nhìn thấy trong nguồn, 'onResume()' có một ghi đè trong 'FragmentActivity', do đó, nó không phải là phiên bản tương tự của' Activity'. Tuy nhiên, tôi cũng đã nhận thấy trong nguồn 'FragmentActvity' mà' onResumeFragments() 'được gọi từ' onPostResume() ', do đó, ít nhất chắc chắn rằng nó được gọi sau' onResume() '. Lý tưởng nhất, tôi sẽ chấp nhận một câu trả lời xác định khi nào sử dụng 'onResumeFragments()' trái ngược với 'onResume()', hoặc xác nhận giả định của tôi. – nekojsi

+1

Bạn nói đúng. Để đơn giản: nếu bạn đang sử dụng thư viện hỗ trợ-v4, hãy cố gắng luôn sử dụng 'onResumeFragments()' thay vì 'onResume()'. Sự khác biệt là tinh tế, hãy xem https://github.com/xxv/android-lifecycle/issues/8 – shkschneider

+0

Cảm ơn. Bạn có thể cập nhật câu trả lời (liên kết đặc biệt hữu ích), vì vậy tôi có thể chấp nhận nó? – nekojsi

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