gpt4 book ai didi

android - 内存泄漏和 OutOfMemoryError

转载 作者:行者123 更新时间:2023-11-29 02:32:39 25 4
gpt4 key购买 nike

所以我想找出为什么我的应用程序崩溃了

Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 128887990 byte allocation with 16777216 free bytes and 76MB until OOM
at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95)
at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:146)
at java.lang.StringBuilder.append(StringBuilder.java:216)

我已经阅读了几篇文章,但它们都指向位图图像,我没有使用任何位图,所以我想也许我有内存泄漏可能会导致这种情况,所以我安装了 leakcanary,它只显示以下泄漏:

com.google.android.gms.internal.zzcfi.zzfus
references com.google.android.gms.common.api.internal.zzci.zzful
references com.google.android.gms.common.api.internal.zzck.zzfuk
com.tech.activity.dashboard instance

我在 Google、Stackoverflow、Github 和 leak canary 上进行了搜索,但找不到关于这究竟是什么泄漏或如何修复它的引用资料。我相信这是来 self 的 google play services location,但这会导致我看到的 OOM 错误吗?有人可以指出我正确的方向吗?

** 编辑 **正如评论指出的那样,这应该是一个字符串生成器问题,自从我第一次发布该应用程序以来,我从未改变过我的字符串生成器的工作方式,这是我的 Stringbuilder 其源代码来自 AccessibilityNodeInfo,我是不是做错了什么?

public void processEvent(final AccessibilityNodeInfo source)
{
final StringBuilder sb = new StringBuilder();
processSubEvent(source, 0, sb);

processUIText(source, sb.toString().toLowerCase());
}

private void processSubEvent(final AccessibilityNodeInfo source, final int n, final StringBuilder sb) {
for (int i = 0; i < n; ++i){
sb.append("\t");
}

if (source != null){
sb.append(tools.getText(source));
sb.append("\n");
final int childCount = source.getChildCount();

for (int i = 0; i < childCount; i++)
{
//Log.e(TAG, "Last UI: " + lastUIText);
AccessibilityNodeInfo child = source.getChild(i);
processSubEvent(child, n + 1, sb);

child.recycle();
}
}
}

这是如何使用信息的示例:

private void processUIText(AccessibilityNodeInfo source, final String text)
{
if (text.contains("hello") && !text.contains("hello again"){
tools.showToast("Hello Reached");
}
}

最佳答案

This is example how the information is being used:

那就不要构建字符串。构建一个 boolean。类似于此的东西应该可以工作:

class Whatever {
private boolean helloSeen=false;
private boolean helloAgainSeen=false;

public void processEvent(final AccessibilityNodeInfo source)
{
processSubEvent(source);
}

private void processSubEvent(final AccessibilityNodeInfo source) {
if (source != null){
String text=tools.getText(source);

if (text.contains("hello")) {
helloSeen=true;
}

if (text.contains("hello again")) {
helloAgainSeen=true;

}

if (!helloSeen || !helloAgainSeen) {
final int childCount = source.getChildCount();

for (int i = 0; i < childCount; i++)
{
//Log.e(TAG, "Last UI: " + lastUIText);
AccessibilityNodeInfo child = source.getChild(i);
processSubEvent(child);

child.recycle();
}
}
}
}
}

processEvent() 返回后,helloSeenhelloAgainSeen 将反射(reflect)您的消息是否在任何地方遇到。

关于android - 内存泄漏和 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48769679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com