2012-05-16 38 views
7

Ok, tôi đã tạo ra một Fragment với một số giao diện người dùng (vài textbox và các công cụ) và tôi đã sử dụng setRetainInstance từ Im chạy một AsyncTask để truy vấn một máy chủ (yêu cầu chỉ có thể được gửi một lần) và tôi cần kết quả của số AsyncTask. Vì vậy, câu hỏi của tôi là: Có sai sót khi giữ lại toàn bộ đoạn với giao diện người dùng không? Tôi thấy vài ví dụ trong đó mọi người sử dụng thêm Fragment để sử dụng số setRetainInstance nhưng .. có điều gì sai khi không sử dụng thêm số đó không ?? Nếu có vấn đề với việc sử dụng setRetainInstance tại sao lại như vậy? Không thể tìm thấy bất kỳ thông tin nào trong tài liệu về vấn đề này.setRetainInstance đoạn với giao diện người dùng Android

Trả lời

-1

Nếu bạn đang khóa hướng của mình thì bạn sẽ ổn thôi. Nếu không, bạn có thể kết thúc với rò rỉ bộ nhớ nếu bạn giữ lại các widget được liên kết với một cá thể hoạt động cụ thể.

+0

nhưng không biết các tiện ích được liên kết với Phân đoạn? có lẽ tôi đã hiểu sai cách Fragments hoạt động. – Raykud

+1

Ngay cả khi hướng bị khóa, điều này có thể có vấn đề. Android sẽ tạo lại chế độ xem cho bất kỳ thay đổi cấu hình nào. Trong khi đó, thay đổi cấu hình có thể là xoay màn hình (trường hợp thông thường), thay đổi ngôn ngữ, gắn/tháo bàn phím và các thứ khác. Chăm sóc xoay màn hình không giải quyết được toàn bộ vấn đề. – sstn

2

Ngay cả khi bạn sử dụng setRetainInstance(true), Phân đoạn của bạn sẽ vẫn tạo lại chế độ xem khi xoay (bạn sẽ nhận được cuộc gọi đến onDestroyView và sau đó onCreateView). Miễn là bạn không giữ tham chiếu đến lượt xem qua onDestroyView, sẽ không có bất kỳ rò rỉ nào của Hoạt động cũ. Cách tiếp cận tốt nhất sẽ rõ ràng là hủy tham chiếu trong onDestroyView, nhưng mã của bạn trong onCreateView thường sẽ ghi đè các tham chiếu đó.

Có nhiều ví dụ trực tuyến (bao gồm một số chính thức) nơi mọi người sử dụng một đoạn riêng biệt (không có chế độ xem) để giữ lại dữ liệu. Giả sử những gì tôi đã nói ở trên là chính xác, thì điều này là không cần thiết (để tránh rò rỉ). Trong nhiều trường hợp, bạn có thể kết thúc với mã/kiến ​​trúc sạch hơn nếu bạn sử dụng một đoạn riêng biệt có trách nhiệm chỉ để xử lý dữ liệu và không lo lắng về giao diện người dùng.

Bạn có thể kiểm tra xem bạn có đang bị rò rỉ ngữ cảnh hoạt động sau khi xoay bằng using Eclipse MAT hay không.

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