Trước hết, hãy xem bài viết của tôi về các mảnh vỡ được giữ lại. Nó sẽ giúp.
Bây giờ để trả lời câu hỏi của bạn:
Liệu đoạn này cũng giữ trạng thái xem của nó , hay điều này sẽ được tạo lại khi thay đổi cấu hình - chính xác thì "được giữ lại" là gì?
Có, Fragment
trạng thái sẽ được giữ lại trong suốt quá trình thay đổi cấu hình. Cụ thể, "giữ lại" có nghĩa là đoạn đó sẽ không bị hủy khi thay đổi cấu hình. Đó là, cái Fragment
sẽ được giữ lại ngay cả khi thay đổi cấu hình làm cho phần bên dưới Activity
bị phá hủy.
Mảnh vỡ sẽ bị phá hủy khi người dùng rời khỏi hoạt động?
Cũng giống như Activity
s, Fragment
s có thể bị hệ thống phá hủy khi tài nguyên bộ nhớ thấp. Việc bạn có phân đoạn giữ trạng thái cá thể của chúng qua các thay đổi cấu hình hay không sẽ không ảnh hưởng đến việc hệ thống có phá hủy Fragment
s hay không khi bạn rời khỏi Activity
. Nếu bạn rời khỏi Activity
(tức là bằng cách nhấn nút home), Fragment
s có thể hoặc không bị phá hủy. Nếu bạn rời khỏi Activity
bằng cách nhấn nút quay lại (do đó, gọi finish()
và hủy hiệu quả Activity
), tất cả các Activity
s đính kèm Fragment
cũng sẽ bị hủy.
Tại sao nó không hoạt động với các mảnh trên ngăn xếp phía sau?
Có thể có nhiều lý do tại sao nó không được hỗ trợ, nhưng lý do rõ ràng nhất đối với tôi là việc Activity
giữ một tham chiếu đến FragmentManager
và FragmentManager
quản lý backstack. Đó là, bất kể bạn có chọn giữ lại Fragment
s của mình hay không, Activity
(và do đó FragmentManager
, backstack) sẽ bị hủy khi thay đổi cấu hình. Một lý do khác tại sao nó có thể không hoạt động là bởi vì mọi thứ có thể trở nên khó khăn nếu cả hai mảnh được giữ lại và mảnh không giữ lại được phép tồn tại trên cùng một backstack.
Đó là những trường hợp sử dụng mà nó có ý nghĩa để sử dụng phương pháp này?
Các đoạn được giữ lại có thể khá hữu ích để truyền bá thông tin trạng thái - đặc biệt là quản lý luồng - qua các trường hợp hoạt động. Ví dụ, một đoạn có thể phục vụ như một máy chủ cho một ví dụ Thread
hoặc AsyncTask
, quản lý hoạt động của nó. Xem bài viết trên blog của tôi về chủ đề này để biết thêm thông tin.
Nói chung, tôi sẽ coi nó tương tự như việc sử dụng onConfigurationChanged
với một Activity
... không sử dụng nó như một chiếc băng đô chỉ vì bạn quá lười biếng để thực hiện / xử lý một sự thay đổi định hướng một cách chính xác. Chỉ sử dụng nó khi bạn cần.