为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

郎朗坤 2023-03-09 14:20:09
在我的应用程序上使用 AndroidStudio 的控制台时,它显示:W/System:资源调用释放失败。有时会说很多遍。我知道这意味着什么,但我已经多次检查了近 2k 行代码,但我不知道我缺少什么来关闭/发布。有什么方法可以从控制台扩展此信息?或者您将如何定位资源是什么或何时无法关闭?欢迎任何想法。谢谢。
查看完整描述

5 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

您可以在不使用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">


查看完整回答
反对 回复 2023-03-09
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

此消息来自dalvik.system.CloseGuard。调试时,您可以将其设置为在创建资源时创建堆栈跟踪,以便您可以追踪哪些对象没有被关闭。


它不是框架 API 的一部分,所以我使用反射来打开它:


try {

    Class.forName("dalvik.system.CloseGuard")

            .getMethod("setEnabled", boolean.class)

            .invoke(null, true);

} catch (ReflectiveOperationException e) {

    throw new RuntimeException(e);

}

更多信息:https://wh0.github.io/2020/08/12/closeguard.html


查看完整回答
反对 回复 2023-03-09
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

我不认为您可以从 Logcat 中获得更多信息。

Android Profiler的内存视图可能是一个很好的起点。在使用您的应用程序时查看它应该可以让您了解哪些操作会导致内存被分配而不是被释放。您还可以从时间轴中选择部分,并按类别深入到特定分配。

另外,LeakCanary是一个检测内存泄漏的好库。


查看完整回答
反对 回复 2023-03-09
?
心有法竹

TA贡献1866条经验 获得超5个赞

通过删除通过另一个函数调用自身的函数调用来修复它,从而对自身进行无限循环调用



查看完整回答
反对 回复 2023-03-09
?
哔哔one

TA贡献1854条经验 获得超8个赞

迟到的答案,但它可能对其他人有用:

我遇到了同样的错误,但我忘记了我的 VPN 在后台运行。断开 VPN 对我有用。这就是说,这可能是由于与您的应用程序或您可能想要检查的 IDE 无关的资源造成的,例如防病毒软件、VPN 等。


查看完整回答
反对 回复 2023-03-09
  • 5 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信