英文:
java.lang.OutOfMemoryError: issuse
问题
我有一部三星手机,型号是SM-A750F,我的安卓版本是9,我有以下日志:
java.lang.OutOfMemoryError:尝试分配 276824056 字节的内存,但剩余 25165824 字节和 117MB 直到 OOM,最大允许占用空间为 170196328,增长限制为 268435456
在 dalvik.system.VMRuntime.newUnpaddedArray(Native Method)
在 com.android.internal.util.ArrayUtils.newUnpaddedCharArray(ArrayUtils.java:51)
在 android.text.SpannableStringBuilder.resizeFor(SpannableStringBuilder.java:145)
在 android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:378)
在 android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:548)
在 android.text.SpannableStringBuilder.append(SpannableStringBuilder.java:269)
在 android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:230)
在 android.widget.AbsListView.obtainView(AbsListView.java:3219)
在 android.widget.ListView.makeAndAddView(ListView.java:2219)
在 android.widget.ListView.fillUp(ListView.java:861)
在 android.widget.ListView.fillGap(ListView.java:800)
在 android.widget.AbsListView.trackMotionScroll(AbsListView.java:8221)
在 android.widget.ListView.trackMotionScroll(ListView.java:2138)
在 android.widget.AbsListView$FlingRunnable.run(AbsListView.java:7644)
在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
在 android.view.Choreographer.doCallbacks(Choreographer.java:761)
在 android.view.Choreographer.doFrame(Choreographer.java:693)
在 android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
在 android.os.Handler.handleCallback(Handler.java:873)
在 android.os.Handler.dispatchMessage(Handler.java:99)
在 android.os.Looper.loop(Looper.java:214)
在 android.app.ActivityThread.main(ActivityThread.java:7078)
在 java.lang.reflect.Method.invoke(Native Method)
在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
我的代码是:
public static CharSequence c(android.view.ViewGroup r6, TextEmojiLabel textEmojiLabel, java.lang.Object r8, StringBuilder sb) {
if (!getBoolTrue(textEmojiLabel.getContext(), "show_mod_groups_check")) {
return sb.toString();
}
if (f(r6, r8, z)) {
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
SpannableString spannableString = new SpannableString(getString(textEmojiLabel.getContext(), group_mod()));
if (getBool(textEmojiLabel.getContext(), "show_mod_in_groups_color_picker")) {
spannableString.setSpan(new ForegroundColorSpan(getIntfromKey(textEmojiLabel.getContext(), "show_mod_in_groups_color_picker")), 0, spannableString.length(), 0);
} else if (getBool(textEmojiLabel.getContext(), "participant_name_color_picker")) {
spannableString.setSpan(new ForegroundColorSpan(getIntfromKey(textEmojiLabel.getContext(), "participant_name_color_picker")), 0, spannableString.length(), 0);
}
if (getLanguage()) {
String str = r8.A0N;
if (!TextUtils.isEmpty(str)) {
spannableStringBuilder.append(str).append("").append(" - ").append(spannableString);
}
} else {
SpannableStringBuilder append = spannableStringBuilder.append("");
String str2 = r8.A0N;
if (!TextUtils.isEmpty(str2)) {
append.append(str2).append(" - ").append(spannableString);
}
}
return spannableStringBuilder;
}
return sb.toString();
}
我认为这个错误是由Java虚拟机(JVM)引发的,当对象由于内存空间不足而无法分配时,垃圾收集器也无法释放一些空间。
我不知道为什么会出现内存不足的情况,以及如何修复它。
英文:
I have samsung phone with MODEL SM-A750F
my ANDROID VERSION is 9
and I have this log
java.lang.OutOfMemoryError: Failed to allocate a 276824056 byte allocation with 25165824 free bytes and 117MB until OOM, max allowed footprint 170196328, growth limit 268435456
at dalvik.system.VMRuntime.newUnpaddedArray(Native Method)
at com.android.internal.util.ArrayUtils.newUnpaddedCharArray(ArrayUtils.java:51)
at android.text.SpannableStringBuilder.resizeFor(SpannableStringBuilder.java:145)
at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:378)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:548)
at android.text.SpannableStringBuilder.append(SpannableStringBuilder.java:269)
at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:230)
at android.widget.AbsListView.obtainView(AbsListView.java:3219)
at android.widget.ListView.makeAndAddView(ListView.java:2219)
at android.widget.ListView.fillUp(ListView.java:861)
at android.widget.ListView.fillGap(ListView.java:800)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:8221)
at android.widget.ListView.trackMotionScroll(ListView.java:2138)
at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:7644)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:693)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7078)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964
My code is
public static CharSequence c(android.view.ViewGroup r6, TextEmojiLabel textEmojiLabel, java.lang.Object r8, StringBuilder sb) {
if (!getBoolTrue(textEmojiLabel.getContext(), "show_mod_groups_check")) {
return sb.toString();
}
if (f(r6, r8, z)) {
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
SpannableString spannableString = new SpannableString(getString(textEmojiLabel.getContext(), group_mod()));
if (getBool(textEmojiLabel.getContext(), "show_mod_in_groups_color_picker")) {
spannableString.setSpan(new ForegroundColorSpan(getIntfromKey(textEmojiLabel.getContext(), "show_mod_in_groups_color_picker")), 0, spannableString.length(), 0);
} else if (getBool(textEmojiLabel.getContext(), "participant_name_color_picker")) {
spannableString.setSpan(new ForegroundColorSpan(getIntfromKey(textEmojiLabel.getContext(), "participant_name_color_picker")), 0, spannableString.length(), 0);
}
if (getLanguage()) {
String str = r8.A0N;
if (!TextUtils.isEmpty(str)) {
spannableStringBuilder.append(str).append("").append(" - ").append(spannableString);
}
} else {
SpannableStringBuilder append = spannableStringBuilder.append("");
String str2 = r8.A0N;
if (!TextUtils.isEmpty(str2)) {
append.append(str2).append(" - ").append(spannableString);
}
}
return spannableStringBuilder;
}
return sb.toString();
}
I think This error is thrown by the Java Virtual Machine (JVM) when an object cannot be allocated due to lack of memory space and also, the garbage collector cannot free some space.
I have no idea or why its out of memory. How to fix it?
专注分享java语言的经验与见解,让所有开发者获益!
评论