我不确定,但我想我偶然发现了第三方库SmartLocation(https://github.com/mrmans0n/smart-location-lib)中的内存泄漏。以下是我用来重现泄漏的代码:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
MyApplication.refWatcher.watch(this)
SmartLocation.with(this)
.location()
.config(LocationParams.NAVIGATION)
.oneFix()
.start {
Timber.d("location: $it")
}
}
override fun onDestroy() {
super.onDestroy()
SmartLocation.with(this)
.location()
.stop()
}
}
我使用的是最新版本的库:
compile 'io.nlopez.smartlocation:library:3.3.3'
将手机的方向改变5次后,我可以在内存分析器中看到我的5个活动实例:
内存分析器
以下是我在YourKit中看到的内容:
Leakcanary也会因为某些原因而无法显示任何内容,因此会因为某些原因而无法显示任何内容。
leakcanary
这里也是StrictMode日志:
E/StrictMode: class com.example.kirakishou.smartlocationmemleaktest.MainActivity; instances=4; limit=1
android.os.StrictMode$InstanceCountViolation: class com.example.kirakishou.smartlocationmemleaktest.MainActivity; instances=4; limit=1
at android.os.StrictMode.setClassInstanceLimit(StrictMode.java:1)