W/System:资源调用释放失败

新手上路,请多包涵

正如标题所说。在我的应用程序上使用 AndroidStudio 的控制台时,它显示:

W/System:资源调用释放失败。

有时会说很多遍。我知道这意味着什么,但我已经多次检查了将近 2k 行代码,但我不知道我缺少什么来关闭/发布。

有什么方法可以从控制台扩展此信息? 或者您将如何定位资源是什么或何时无法关闭?欢迎任何想法。谢谢。

原文由 Emiliho Stifler 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 374
1 个回答

@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">

原文由 pallgeuer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题