2017-07-26 39 views
5

Tôi có một ứng dụng mà tôi sử dụng Butterknife, và gần đây tôi đã tìm thấy một mảnh mà tôi đã không gọi unbinder.unbind() trong đoạn onDestroyView() của đoạn. Tôi đã khắc phục vấn đề nhưng nó khiến tôi bắt đầu suy nghĩ.Điều gì xảy ra chính xác khi bạn không sử dụng unbind()?

Loại lỗi này có thể gây ra lý do gì và tại sao? Tôi không có lỗi cụ thể ngay bây giờ nhưng tôi muốn biết những gì cần xem trong tương lai và trang web cho thư viện không chỉ định các vấn đề mà điều này có thể gây ra.

Trả lời

2

Hãy tưởng tượng bạn có một số retained fragment và bạn đã khởi tạo chế độ xem bằng cách sử dụng @BindView.

Thay đổi định hướng xảy ra, dẫn đến phá hủy hoạt động, nhưng không phải mảnh này, bởi vì đoạn này là đoạn được giữ lại, có nghĩa là trường bạn đã khởi tạo vẫn ở đó (không phải null) và đang giữ tham chiếu mạnh mẽ đến chế độ xem hoạt động trước đó, dẫn đến rò rỉ hoạt động.

Mặc dù điều này có thể mất một khoảng thời gian nhỏ (vì cuối cùng bạn sẽ thực hiện một số khác ButterKnife.bind() trong onViewCreated(), phải không? Nhưng ai biết được, có thể bạn sẽ không), vẫn tốt hơn là phát hành tài nguyên ngay sau bạn không cần chúng và để cho GC thực hiện công việc của mình.

Tôi cũng đã nghĩ về câu hỏi này một số thời gian trước đây và khác với điều này tôi không thể đi đến một kịch bản khác, nơi unbind() sẽ rất cần thiết.

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