50%の時間、アプリを実行すると、このエラーが発生します
06-20 12:56:51.183: A/libc(32140): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 32140 (example.www)
アプリを再度開くだけで機能します。しかし、なぜこのエラーが発生してアプリがクラッシュするのかわかりません。私は、サイズがほぼ1200x1200pxの大きな画像を使用し、それを背景として設定しています。また、背景として他のアクティビティのビットマップとしてその画像を使用します。また、サーバーへの呼び出しをいくつか行い、JSONデータを取得します。何を探すべきかわからないので、十分な情報を提供したいと思います... 4.1.2用に開発しています
完全なLogcat
06-20 13:02:38.823: W/ActivityThread(4102): Application eu.sexample.www can be debugged on port 8100...
06-20 13:02:38.983: D/dalvikvm(4102): GC_FOR_ALLOC freed 114K, 7% free 12283K/13191K, paused 13ms, total 13ms
06-20 13:02:38.988: I/dalvikvm-heap(4102): Grow heap (frag case) to 18.398MB for 5954576-byte allocation
06-20 13:02:39.008: D/dalvikvm(4102): GC_CONCURRENT freed 1K, 5% free 18096K/19015K, paused 12ms+1ms, total 22ms
06-20 13:02:39.053: D/dalvikvm(4102): GC_FOR_ALLOC freed 0K, 5% free 18097K/19015K, paused 10ms, total 10ms
06-20 13:02:39.088: I/dalvikvm-heap(4102): Grow heap (frag case) to 41.112MB for 23818256-byte allocation
06-20 13:02:39.103: D/dalvikvm(4102): GC_CONCURRENT freed 0K, 3% free 41357K/42311K, paused 3ms+1ms, total 16ms
06-20 13:02:39.168: D/dalvikvm(4102): GC_FOR_ALLOC freed 5815K, 16% free 35916K/42695K, paused 10ms, total 10ms
06-20 13:02:39.193: E/Location(4102): 51.1878642, 4.3802626
06-20 13:02:39.283: D/libEGL(4102): loaded /system/lib/egl/libEGL_mali.so
06-20 13:02:39.283: D/libEGL(4102): loaded /system/lib/egl/libGLESv1_CM_mali.so
06-20 13:02:39.288: D/libEGL(4102): loaded /system/lib/egl/libGLESv2_mali.so
06-20 13:02:39.288: D/(4102): Device driver API match
06-20 13:02:39.288: D/(4102): Device driver API version: 10
06-20 13:02:39.288: D/(4102): User space API version: 10
06-20 13:02:39.288: D/(4102): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Tue Oct 16 15:37:13 KST 2012
06-20 13:02:39.323: D/OpenGLRenderer(4102): Enabling debug mode 0
06-20 13:02:42.413: D/dalvikvm(4102): GC_FOR_ALLOC freed 448K, 14% free 37130K/42695K, paused 13ms, total 13ms
06-20 13:02:42.423: I/dalvikvm-heap(4102): Grow heap (frag case) to 42.664MB for 5954576-byte allocation
06-20 13:02:42.433: D/dalvikvm(4102): GC_CONCURRENT freed 4K, 12% free 42941K/48519K, paused 2ms+2ms, total 13ms
06-20 13:02:42.478: D/dalvikvm(4102): GC_FOR_ALLOC freed 0K, 12% free 42941K/48519K, paused 10ms, total 10ms
06-20 13:02:42.478: I/dalvikvm-heap(4102): Forcing collection of SoftReferences for 23818256-byte allocation
06-20 13:02:42.498: D/dalvikvm(4102): GC_BEFORE_OOM freed 9K, 12% free 42931K/48519K, paused 19ms, total 19ms
06-20 13:02:42.498: E/dalvikvm-heap(4102): Out of memory on a 23818256-byte allocation.
06-20 13:02:42.498: I/dalvikvm(4102): "main" prio=5 tid=1 RUNNABLE
06-20 13:02:42.498: I/dalvikvm(4102): | group="main" sCount=0 dsCount=0 obj=0x41585508 self=0x415758c8
06-20 13:02:42.498: I/dalvikvm(4102): | sysTid=4102 Nice=0 sched=0/0 cgrp=apps handle=1074532144
06-20 13:02:42.498: I/dalvikvm(4102): | schedstat=( 2709445063 154759556 1906 ) utm=227 stm=43 core=2
06-20 13:02:42.498: I/dalvikvm(4102): at Android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
06-20 13:02:42.498: I/dalvikvm(4102): at Android.graphics.BitmapFactory.decodeStream(BitmapFactory.Java:623)
06-20 13:02:42.498: I/dalvikvm(4102): at Android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.Java:476)
06-20 13:02:42.503: I/dalvikvm(4102): at Android.graphics.drawable.Drawable.createFromResourceStream(Drawable.Java:781)
06-20 13:02:42.503: I/dalvikvm(4102): at Android.content.res.Resources.loadDrawable(Resources.Java:1963)
06-20 13:02:42.503: I/dalvikvm(4102): at Android.content.res.TypedArray.getDrawable(TypedArray.Java:601)
06-20 13:02:42.503: I/dalvikvm(4102): at Android.view.View.<init>(View.Java:3436)
06-20 13:02:42.503: I/dalvikvm(4102): at Android.view.View.<init>(View.Java:3371)
06-20 13:02:42.503: I/dalvikvm(4102): at Android.view.ViewGroup.<init>(ViewGroup.Java:426)
06-20 13:02:42.503: I/dalvikvm(4102): at Android.widget.RelativeLayout.<init>(RelativeLayout.Java:184)
06-20 13:02:42.503: I/dalvikvm(4102): at Java.lang.reflect.Constructor.constructNative(Native Method)
06-20 13:02:42.503: I/dalvikvm(4102): at Java.lang.reflect.Constructor.newInstance(Constructor.Java:417)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.view.LayoutInflater.createView(LayoutInflater.Java:587)
06-20 13:02:42.508: I/dalvikvm(4102): at com.Android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.Java:56)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.view.LayoutInflater.onCreateView(LayoutInflater.Java:660)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:685)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:466)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:396)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:352)
06-20 13:02:42.508: I/dalvikvm(4102): at com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:308)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.app.Activity.setContentView(Activity.Java:1924)
06-20 13:02:42.508: I/dalvikvm(4102): at eu.sexample.www.MainActivity.onCreate(MainActivity.Java:28)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.app.Activity.performCreate(Activity.Java:5206)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1083)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2064)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2125)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.app.ActivityThread.access$600(ActivityThread.Java:140)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1227)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.os.Handler.dispatchMessage(Handler.Java:99)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.os.Looper.loop(Looper.Java:137)
06-20 13:02:42.508: I/dalvikvm(4102): at Android.app.ActivityThread.main(ActivityThread.Java:4898)
06-20 13:02:42.508: I/dalvikvm(4102): at Java.lang.reflect.Method.invokeNative(Native Method)
06-20 13:02:42.508: I/dalvikvm(4102): at Java.lang.reflect.Method.invoke(Method.Java:511)
06-20 13:02:42.513: I/dalvikvm(4102): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1006)
06-20 13:02:42.513: I/dalvikvm(4102): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:773)
06-20 13:02:42.513: I/dalvikvm(4102): at dalvik.system.NativeStart.main(Native Method)
06-20 13:02:42.513: A/libc(4102): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 4102 (example.www)
実際のエラーはOut of memory on a 23818256-byte allocation
です。 〜22MBのメモリブロックを割り当てようとしていますが、使用可能な空きメモリがあまりありません。ましてや、連続する大きなブロックはありません。
この場合、これは描画可能なリソースから来ています。 〜22MBは、1200x1200よりも2400x2400に近い、非常に大きな画像になります。
プロセスヒープサイズは48MBです。これはかなりの量ですが、最大22MBがヒープ予算のほぼ半分です。
これがどの描画可能リソースであるか(RelativeLayout
の背景のように見える)を見つけてから、そのサイズと同様の画像のサイズを小さくすることをお勧めします。ここで、「サイズ」とは、ディスク上のサイズではなく、ピクセル数の合計を意味します。重要なのは、ディスク上のイメージの大きさではなく、RAMの解凍サイズです。
また、これはリソースディレクトリの問題である可能性があります。たとえば、1200x1200の画像をres/drawable/
に配置した場合、それはres/drawable-mdpi/
と同義です。このデバイスが-xhdpi
デバイスである場合、Androidはこの画像をアップサンプリングし、各次元を2倍にしようとするため、メモリ使用量を説明します。
AndroidManifestで。
<application.... Android:hardwareAccelerated="false" />
私のために働く。