在Android 11中,检测泄漏可关闭对象的StrictMode函数detectLeakedClosableObjects()可能会总是触发,即使已经关闭了所有需要关闭的对象。这是由于Android 11中的StrictMode修改导致的。为了解决这个问题,可以使用以下代码示例:
在Application类的onCreate()方法中添加以下代码:
Kotlin:
val builder = StrictMode.VmPolicy.Builder()
builder.detectLeakedClosableObjects()
builder.penaltyLog()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
builder.permitImplicitNetworkOperations()
}
StrictMode.setVmPolicy(builder.build())
Java:
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
builder.detectLeakedClosableObjects();
builder.penaltyLog();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
builder.permitImplicitNetworkOperations();
}
StrictMode.setVmPolicy(builder.build());
这将允许在Android 11上使用与先前版本相同的StrictMode行为,同时仍然可以检测泄漏的可关闭对象。