0

私のプロジェクトでは、エミュレーターで以下のようなメモリ不足エラーに気づいています

    08-03 01:38:28.995: W/dalvikvm(1040): threadid=1: thread exiting with uncaught exception (group=0x40015560)
    08-03 01:38:29.045: E/AndroidRuntime(1040): FATAL EXCEPTION: main
    08-03 01:38:29.045: E/AndroidRuntime(1040): java.lang.RuntimeException: Unable to  start activity ComponentInfo{sdei.edustatus/sdei.edustatus.gradebook.GradeBookActivity}:  android.view.InflateException: Binary XML file line #78: Error inflating class <unknown>
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.os.Handler.dispatchMessage(Handler.java:99)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.os.Looper.loop(Looper.java:123)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.app.ActivityThread.main(ActivityThread.java:3683)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at java.lang.reflect.Method.invokeNative(Native Method)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at java.lang.reflect.Method.invoke(Method.java:507)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at dalvik.system.NativeStart.main(Native Method)
    08-03 01:38:29.045: E/AndroidRuntime(1040): Caused by: android.view.InflateException: Binary XML file line #78: Error inflating class <unknown>
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.view.LayoutInflater.createView(LayoutInflater.java:518)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.app.Activity.setContentView(Activity.java:1657)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at sdei.edustatus.gradebook.GradeBookActivity.onCreate(GradeBookActivity.java:311)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     ... 11 more
    08-03 01:38:29.045: E/AndroidRuntime(1040): Caused by: java.lang.reflect.InvocationTargetException
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at java.lang.reflect.Constructor.constructNative(Native Method)
    03 01:38:29.045: E/AndroidRuntime(1040):    at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.view.LayoutInflater.createView(LayoutInflater.java:505)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     ... 22 more
    08-03 01:38:29.045: E/AndroidRuntime(1040): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:460)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.content.res.Resources.loadDrawable(Resources.java:1709)
   08-03 01:38:29.045: E/AndroidRuntime(1040):  at   android.content.res.TypedArray.getDrawable(TypedArray.java:601)
   08-03 01:38:29.045: E/AndroidRuntime(1040):  at android.view.View.<init>(View.java:1951)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.view.View.<init>(View.java:1899)
    08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.view.ViewGroup.<init>(ViewGroup.java:286)
        08-03 01:38:29.045: E/AndroidRuntime(1040):     at android.widget.RelativeLayout.<init>            (RelativeLayout.java:173)
     08-03 01:38:29.045: E/AndroidRuntime(1040):    ... 25 more

はい、いくつかの画像を使用していますが、それらを個別に処理する必要がありますか????????? 私のアプリケーションのサイズは 2.4mb です。

私は何をすべきか?

4

3 に答える 3

3

Javaでは、gcが原因でメモリリークが発生するはずはないと思います

は間違った記述です。コードがメモリ リークを引き起こす場合、jvm は何もできません。

あなたの場合、エラーは

原因: java.lang.OutOfMemoryError: ビットマップ サイズが VM の予算を超えています

大きなサイズのビットマップ画像を読み込もうとしているようです(dalvikはサポートしていません)。この問題に関連するSOについては、ここここで多くの議論があります。

于 2012-08-03T15:09:33.843 に答える
0

Eclipseエミュレーターを使用していると思いますか?

その場合、次の行で強調表示されている画像を表示するのに十分なメモリ/ディスク設定がない可能性があります。

原因: java.lang.OutOfMemoryError: ビットマップ サイズが VM の予算を超えています

AVDに移動してeclipseの設定を確認し(使用している場合)、仮想デバイスを選択して編集を押します。ハードウェアの下にSDカードのサイズとメモリ設定が表示されます。エミュレータに割り当てることができるメモリのサイズには制限があると思いますので、電話を使用することをお勧めします。

実際のデバイスでデバッグを試みたことがありますか?

編集:

実際、この問題も発生する可能性があります。

java.lang.OutOfMemoryError: ビットマップ サイズが VM の予算を超えています - Android

于 2012-08-03T15:12:50.877 に答える
0

いくつかのことがあります。

1) メモリ リークがないことを確認します。たとえば、このプロファイルのコードでは、MAT (http://www.eclipse.org/mat/) を使用します。

2) 画像の適切なメモリ管理を行います。SoftReferences と WeakReferences を使用する

3) 画像キャッシュと画像ダウンロードローダー (キャッシュ付き) については、Web (google it) で多数の実装を見つけることができます。最も気に入ったものを検索して選択してください。

ただし、常に上記の 1 を実行してください。

于 2012-08-03T15:16:47.843 に答える