5 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以在不使用Strict Mode進(jìn)行反射的情況下實(shí)現(xiàn)完全相同的結(jié)果。具體來(lái)說(shuō),是這樣的:
StrictMode.setVmPolicy(new VmPolicy.Builder()
.detectLeakedClosableObjects()
.penaltyLog()
.build());
一般來(lái)說(shuō),嚴(yán)格模式可以為您做更多事情(參見上面的文檔鏈接),對(duì)于默認(rèn)設(shè)置,您需要做的就是:
StrictMode.enableDefaults(); # <-- This includes warning on leaked closeables
要“盡快”啟用嚴(yán)格模式,您可以將上述任一代碼選項(xiàng)添加到應(yīng)用程序類的構(gòu)造函數(shù)中,例如:
public class MyApp extends Application {
public MyApp() {
if(BuildConfig.DEBUG)
StrictMode.enableDefaults();
}
}
請(qǐng)注意,除了只創(chuàng)建上面的類之外,您還需要告訴 Android 您已經(jīng)在其中創(chuàng)建了一個(gè)自定義應(yīng)用程序類AndroidManifest.xml(以便在您的應(yīng)用程序進(jìn)程啟動(dòng)時(shí)創(chuàng)建它的實(shí)例,而不是 Android 創(chuàng)建默認(rèn)Application類)。您需要添加/修改標(biāo)簽android:name的屬性<application>以指向您的自定義應(yīng)用程序類(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">

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
此消息來(lái)自dalvik.system.CloseGuard。調(diào)試時(shí),您可以將其設(shè)置為在創(chuàng)建資源時(shí)創(chuàng)建堆棧跟蹤,以便您可以追蹤哪些對(duì)象沒有被關(guān)閉。
它不是框架 API 的一部分,所以我使用反射來(lái)打開它:
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

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
我不認(rèn)為您可以從 Logcat 中獲得更多信息。
Android Profiler的內(nèi)存視圖可能是一個(gè)很好的起點(diǎn)。在使用您的應(yīng)用程序時(shí)查看它應(yīng)該可以讓您了解哪些操作會(huì)導(dǎo)致內(nèi)存被分配而不是被釋放。您還可以從時(shí)間軸中選擇部分,并按類別深入到特定分配。
另外,LeakCanary是一個(gè)檢測(cè)內(nèi)存泄漏的好庫(kù)。

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
通過(guò)刪除通過(guò)另一個(gè)函數(shù)調(diào)用自身的函數(shù)調(diào)用來(lái)修復(fù)它,從而對(duì)自身進(jìn)行無(wú)限循環(huán)調(diào)用

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
遲到的答案,但它可能對(duì)其他人有用:
我遇到了同樣的錯(cuò)誤,但我忘記了我的 VPN 在后臺(tái)運(yùn)行。斷開 VPN 對(duì)我有用。這就是說(shuō),這可能是由于與您的應(yīng)用程序或您可能想要檢查的 IDE 無(wú)關(guān)的資源造成的,例如防病毒軟件、VPN 等。
添加回答
舉報(bào)