2017-02-26 17 views
17

Tôi đang sử dụng Leak Canary để theo dõi rò rỉ bộ nhớ và nó nói những điều sau đây đã bị rò rỉ:MainActivity bị rò rỉ sử dụng leakcanary

static hk.o 
references ht.a 
leaks MainActivity instance 

các hk.oht.a là gì? Tôi không có chúng trong MainActivity của tôi.

+0

Tôi có cùng một vấn đề, có lẽ một cái gì đó liên quan đến việc chơi thư viện dịch vụ google. – meh

+0

Những tên lớp này bị làm xáo trộn và có thể là bất cứ điều gì. Có nút Chia sẻ thông tin trong menu Rò rỉ, đăng toàn bộ đầu ra ở đây. –

Trả lời

3

Tôi nghĩ rằng chúng được bảo vệ chuyên nghiệp (đổi tên các lớp với tên ngẫu nhiên để ngăn chặn kỹ thuật đảo ngược) của bất kỳ một trong những phụ thuộc. Tôi đã thấy điều này khi các nội dung liên quan như Đăng nhập bằng Google được sử dụng trong ứng dụng.

Các lớp dịch vụ của Google thường được bảo vệ chuyên nghiệp.

Tôi hy vọng điều này sẽ hữu ích.

3

Các lớp đó là các lớp thư viện của bên thứ ba. Bạn có thể lấy đối tượng MainActivity của bạn làm đối số và truyền vào thể hiện của lớp thuộc về thư viện. Bạn có thể sử dụng ApplicationContext như một đối số nếu nó không cần thiết để truyền vào Activity.

0

Tôi đã theo dõi điều này và thủ phạm là Quảng cáo của Google. Các lớp bạn đã đề cập thực sự là từ thư viện com.google.ads.interactivemedia.v3:interactivemedia, được bao gồm với play-services-ads.

Tham chiếu đến hoạt động được đặt thông qua hàm tạo của PublisherAdView, trong đó tôi đã vượt qua ngữ cảnh hoạt động. Có thể bạn cũng đang sử dụng chế độ xem quảng cáo tương tự trong ứng dụng của mình.

Là một workaround, bây giờ tôi vượt qua bối cảnh ứng dụng giao diện quảng cáo, mà dường như đã giải quyết được rò rỉ:

new PublisherAdView(getContext().getApplicationContext()) 
Các vấn đề liên quan