在我的应用程序上使用 AndroidStudio 的控制台时,它显示:
W/System:资源无法调用释放。
有时会说很多遍。我知道这意味着什么,但我已经多次检查了将近 2k 行代码,但我不知道我缺少什么来关闭/发布。
有什么方法可以从控制台扩展此信息?或者您将如何确定资源是什么或何时无法关闭?欢迎任何想法。谢谢。
最佳答案
@guest 的答案有效,但您无需使用 Strict Mode 进行反射即可实现完全相同的效果.具体来说,像这样:
StrictMode.setVmPolicy(new VmPolicy.Builder()
.detectLeakedClosableObjects()
.penaltyLog()
.build());
一般来说,严格模式可以为您做更多事情(参见上面的文档链接),对于默认设置,您需要做的就是:
StrictMode.enableDefaults(); # <-- This includes warning on leaked closeables
要“尽快”启用严格模式,您可以将上述任一代码选项添加到应用程序类的构造函数中,例如:
public class MyApp extends Application {
public MyApp() {
if(BuildConfig.DEBUG)
StrictMode.enableDefaults();
}
}
请注意,除了只创建上面的类之外,您还需要告诉 Android 您已经在 AndroidManifest.xml
中创建了一个自定义应用程序类。 (以便在您的应用程序进程启动时创建它的实例,而不是 Android 创建默认的 Application
类)。您需要添加/修改 android:name
<application>
的属性标记指向自定义应用程序类的完全解析包路径(在本例中为 MyApp
):
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:name="com.example.app.MyApp" <-- IMPORTANT PART: ADAPT FOR YOUR ACTUAL PROJECT
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
关于java - 带系统 : A resource failed to call release,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60253484/