gpt4 book ai didi

java - ShowCaseView 内存不足错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:47 25 4
gpt4 key购买 nike

我在使用 Galaxy S 系列时遇到了一些问题,展示 View 在任何其他设备上都可以完美运行,但在 Galaxy S 设备上出现以下错误。

java.lang.OutOfMemoryError: Failed to allocate a 5760012 byte allocation with 3573238 free bytes and 3MB until OOM at dalvik.system.VMRuntime.newNonMovableArray(VMRuntime.java) at android.graphics.BitmapFactory.nativeDecodeAsset(BitmapFactory.java)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:726)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:547)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1014)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:3747)
at android.content.res.Resources.loadDrawable(Resources.java:3620) at android.content.res.Resources.getDrawable(Resources.java:1852) at android.support.v4.content.res.ResourcesCompatApi21.getDrawable(ResourcesCompatApi21.java)
at android.support.v4.content.res.ResourcesCompat.getDrawable(ResourcesCompat.java)
at com.github.amlcurran.showcaseview.StandardShowcaseDrawer.(StandardShowcaseDrawer.java)
at com.github.amlcurran.showcaseview.ShowcaseView.(ShowcaseView.java)
at com.github.amlcurran.showcaseview.ShowcaseView.(ShowcaseView.java)
at com.github.amlcurran.showcaseview.ShowcaseView$Builder.(ShowcaseView.java)
at com.github.amlcurran.showcaseview.ShowcaseView$Builder.(ShowcaseView.java)
at br.com.mygas.myapplication.MainActivity.showcase(MainActivity.java)
at br.com.mygas.myapplication.MainActivity.access$300(MainActivity.java)
at br.com.mygas.myapplication.MainActivity$5.onShowcaseViewDidHide(MainActivity.java)
at com.github.amlcurran.showcaseview.ShowcaseView$2.onAnimationEnd(ShowcaseView.java)
at com.github.amlcurran.showcaseview.AnimatorAnimationFactory$2.onAnimationEnd(AnimatorAnimationFactory.java)
at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1089)
at android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:666)
at android.animation.ValueAnimator$AnimationHandler.run(ValueAnimator.java:682)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
at android.view.Choreographer.doCallbacks(Choreographer.java:590) at
android.view.Choreographer.doFrame(Choreographer.java:559) at
android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
at android.os.Handler.handleCallback(Handler.java:739) at
android.os.Handler.dispatchMessage(Handler.java:95) at
android.os.Looper.loop(Looper.java:145) at
android.app.ActivityThread.main(ActivityThread.java:5942) at
java.lang.reflect.Method.invoke(Method.java) at
java.lang.reflect.Method.invoke(Method.java:372) at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

这是产生上述错误的代码:

private void showcase() {
if (SaveSharedPreference.isMainActivity(this)) {
switch (counter) {
case 0:
new ShowcaseView.Builder(this)
.withMaterialShowcase()
.setContentTitle("Esta é a tela inicial:")
.setStyle(R.style.CustomShowcaseThemeNext)
.setShowcaseEventListener(new SimpleShowcaseEventListener() {
@Override
public void onShowcaseViewDidHide(ShowcaseView showcaseView) {
counter++;
showcase();
}
})
.build();
break;

case 1:
new ShowcaseView.Builder(this)
.setContentTitle("Selecione o tipo de combustível:")
.setTarget(new ViewTarget(R.id.spinner, this))
.setShowcaseDrawer(new CustomShowcaseView(this, findViewById(R.id.spinner).getWidth(), findViewById(R.id.spinner).getHeight()))
.setShowcaseEventListener(new SimpleShowcaseEventListener() {
@Override
public void onShowcaseViewDidHide(ShowcaseView showcaseView) {
counter++;
showcase();
}
})
.build();
break;

case 2:
new ShowcaseView.Builder(this)
.withMaterialShowcase()
.setTarget(new ViewTarget(R.id.fab2, this))
.setContentTitle("Clique neste botão para procurar combustível ao redor:")
.setStyle(R.style.CustomShowcaseThemeNext)
.setShowcaseEventListener(new SimpleShowcaseEventListener() {
@Override
public void onShowcaseViewDidHide(ShowcaseView showcaseView) {
counter++;
showcase();
}
})
.build();
break;

case 3:
new ShowcaseView.Builder(this)
.withMaterialShowcase()
.setTarget(new ViewTarget(R.id.fab2, this))
.setContentTitle("Lembre-se:")
.setContentText("É necessário estar com o GPS ligado")
.setStyle(R.style.CustomShowcaseTheme2)
.setShowcaseEventListener(new SimpleShowcaseEventListener() {
@Override
public void onShowcaseViewDidHide(ShowcaseView showcaseView) {
counter++;
showcase();
}
})
.build();
SaveSharedPreference.mainActivityFirst(this);
break;
}
}
}

我无法弄清楚错误来自何处,因此寻求任何建议。

最佳答案

OutOfMemoryError 是 Android 中最常见的问题,尤其是在处理位图时。当由于内存空间不足而无法分配对象并且垃圾收集器无法释放一些空间时,Java 虚拟机 (JVM) 会抛出此错误。

磁盘上文件的大小不一定与内存中文件的大小一致。文件很可能是经过压缩的,但解码时却不会。您需要在计算中考虑到这一点。

您可以引用how to load bitmaps efficiently?上的这篇文章
How to load large bitmaps efficiently?

虽然使用它不是一个好主意 android:largeHeap="true" 这是来自 google 的摘录对其进行了解释,

However, the ability to request a large heap is intended only for a small set of apps that can justify the need to consume more RAM (such as a large photo editing app). Never request a large heap simply because you've run out of memory and you need a quick fix—you should use it only when you know exactly where all your memory is being allocated and why it must be retained. Yet, even when you're confident your app can justify the large heap, you should avoid requesting it to whatever extent possible. Using the extra memory will increasingly be to the detriment of the overall user experience because garbage collection will take longer and system performance may be slower when task switching or performing other common operations.

这是文档的完整链接 https://developer.android.com/training/articles/memory.html

但是,您可以尝试在andriod list 文件中设置它并运行。

关于java - ShowCaseView 内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35941998/

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