【已解决】 自己写的一个控件,内存好像泄漏了,但是看不太懂
┬───
│ GC Root: Global variable in native code
│
├─ android.app.Activity$1 instance
│ Leaking: UNKNOWN
│ Anonymous subclass of android.app.IRequestFinishCallback$Stub
│ ↓ Activity$1.this$0
│ ~~~~~~
╰→ com.zcgame.floatview.MainActivity instance
Leaking: YES (ObjectWatcher was watching this because com.zcgame.floatview.MainActivity received Activity#onDestroy() callback and Activity#mDestroyed is true)
key = ad013e74-2f9c-4ce6-afba-065a9f297553
watchDurationMillis = 24773
retainedDurationMillis = 19763
METADATA
Build.VERSION.SDK_INT: 29
Build.MANUFACTURER: OnePlus
LeakCanary version: 2.4
App process name: com.zcgame.floatview
Analysis duration: 7988 ms
这玩意要怎么分析?GC没有回收?
谁使用activity的context,全部列出来,一个一个接受教育。应该不多吧。
内存泄露
什么是内存泄露,也就是实例对象被某个地方还持有引用,导致GC无法回收。
那么从上面的log看,你的一个匿名内部类持有着Activity的实例,导致Activity无法被回收。
特别是Handler在使用的时候,一定要注意。
记住一个原则:
谁创建,谁释放。
以上虽然是系统创建的Activity,但是也由系统释放,但是被你引用了呀,所以呀,检查一下你的Activity被哪里引用了,并且尽量不要引用Activity,除非是由Activity创建的类,才传给它。