亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號