2

プログラムは正常に読み込まれ、いくつかの画面を通過できますが、main.xml を読み込もうとすると、API 14 でのみプログラムがクラッシュします。

logcat 出力:

04-26 09:02:14.290: E/AndroidRuntime(566): FATAL EXCEPTION: main
04-26 09:02:14.290: E/AndroidRuntime(566): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.surreall.yacht/com.surreall.yacht.yatzee}: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.os.Looper.loop(Looper.java:137)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.ActivityThread.main(ActivityThread.java:4340)
04-26 09:02:14.290: E/AndroidRuntime(566):  at java.lang.reflect.Method.invokeNative(Native Method)
04-26 09:02:14.290: E/AndroidRuntime(566):  at java.lang.reflect.Method.invoke(Method.java:511)
04-26 09:02:14.290: E/AndroidRuntime(566):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-26 09:02:14.290: E/AndroidRuntime(566):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-26 09:02:14.290: E/AndroidRuntime(566):  at dalvik.system.NativeStart.main(Native Method)
04-26 09:02:14.290: E/AndroidRuntime(566): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.createView(LayoutInflater.java:606)
04-26 09:02:14.290: E/AndroidRuntime(566):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:653)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
04-26 09:02:14.290: E/AndroidRuntime(566):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.Activity.setContentView(Activity.java:1835)
04-26 09:02:14.290: E/AndroidRuntime(566):  at com.surreall.yacht.yatzee.onCreate(yatzee.java:211)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.Activity.performCreate(Activity.java:4465)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
04-26 09:02:14.290: E/AndroidRuntime(566):  ... 11 more
04-26 09:02:14.290: E/AndroidRuntime(566): Caused by: java.lang.reflect.InvocationTargetException
04-26 09:02:14.290: E/AndroidRuntime(566):  at java.lang.reflect.Constructor.constructNative(Native Method)
04-26 09:02:14.290: E/AndroidRuntime(566):  at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.LayoutInflater.createView(LayoutInflater.java:586)
04-26 09:02:14.290: E/AndroidRuntime(566):  ... 23 more
04-26 09:02:14.290: E/AndroidRuntime(566): Caused by: java.lang.OutOfMemoryError
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.Bitmap.nativeCreate(Native Method)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.Bitmap.createBitmap(Bitmap.java:605)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.Bitmap.createBitmap(Bitmap.java:551)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:437)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:524)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:499)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:351)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.content.res.Resources.loadDrawable(Resources.java:1937)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.View.<init>(View.java:2780)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.view.ViewGroup.<init>(ViewGroup.java:385)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.widget.LinearLayout.<init>(LinearLayout.java:174)
04-26 09:02:14.290: E/AndroidRuntime(566):  at android.widget.LinearLayout.<init>(LinearLayout.java:170)
04-26 09:02:14.290: E/AndroidRuntime(566):  ... 26 more

スタック オーバーフローの質問制限が 30k 文字に制限されているため、main.xml の内容を投稿できません。それ以上です。どこから始めるべきかの提案?

4

4 に答える 4

2

ここで同様の問題を見つけました

どうやらこれは Android エミュレーターのヒープ サイズに問題があったようです。API 14 で使用していたエミュレーターの AVD で「最大 VM アプリケーション ヒープ サイズ」を 24 から 48 に変更したところ、クラッシュしなくなりました。API が 6 MB から 23.5 MB のヒープを使用する理由はまだ十分に説明されていません。エンド ユーザー デバイスのすべてのハードウェアが少なくとも 48 MB のヒープ サイズを持っていることを望んでいます。そうしないと、アプリケーションがクラッシュします。今のところ、これを修正済みとしてマークしています。

于 2012-05-02T00:28:35.940 に答える
1

レイアウトに大きすぎる画像を読み込もうとしています。エラー メッセージの下部を参照してください。

OutOfMemoryError
Resources.loadDrawable()

中のどこかにあるLinearLayout

于 2012-04-28T23:58:40.783 に答える
1

私の経験によると、実際のデバイスでも発生する可能性があります.Galaxy nexusでもまったく同じメモリ不足の例外が発生しました. 解決のために発生すると思います。

考えられる解決策は次のとおりです。

  1. 必要に応じて画像をサンプリングします。
  2. マニフェストでより大きなヒープ サイズを設定します。
  3. 画像が静的な場合は、独自の imageView 代替を作成します。これは、画像のみを表示し、その後は参照を保持しません (または、代わりにソフトリファレンスとビルダーを使用します)。
  4. opengl /ndk など、ヒープ サイズの制限を回避できるフレームワークを使用してください。
  5. いずれにせよ、すべての画像を保存しないでください。代わりに、現在必要なものだけを保存し、残りはキャッシュ (LRU キャッシュまたはソフトリファレンス キャッシュ) に残すことができます。
于 2012-05-04T08:41:24.413 に答える
0

問題が、API 14 以降のデフォルトで有効になっているハードウェア アクセラレーションに関連していないかどうかを確認します。詳細については、次を参照してください。

http://developer.android.com/guide/topics/graphics/hardware-accel.html

私が取り組んでいた 1 つのアプリケーションで、特定のビューでクラッシュが発生しました。これは、API 14 によって有効になったハードウェア アクセラレーションが原因でした。上記のリンクは、いくつかのレベルで無効にする方法を示しています。私の場合は、ビュー レベルで無効にしただけです。新しいテーマ (ICS 以降に導入された) を使用しようとしている場合、アプリケーション全体を無効にすると、いくつかの問題が発生します。

于 2013-08-23T20:55:40.210 に答える